error: '[class name]' does not name a type

戀上貓的大鯉魚發表於2016-06-12

這個問題困擾了我好幾個小時,真的很痛苦,所以記錄一下。

我編譯平臺是Linux,編譯命令如下:

g++ -g -Wall -std=c++11 -I/usr/local/mysql/include -I/usr/local/curl/include -o obj/tc_mysql.o -c tc_mysql.cpp

從命令中可以看出,我是對原始檔tc_mysql.cpp進行編譯。但是卻始終報如下錯誤:

tc_mysql.cpp:12:1: error: 'TC_Mysql' does not name a type
TC_Mysql::TC_Mysql()

這裡寫圖片描述

我發誓,我在原始檔中一定包含了標頭檔案,也不會像網上所說的存在多個標頭檔案的相互依賴,標頭檔案和原始檔如下:

//標頭檔案tc_mysql.h

#ifndef __TC_MYSQL_H
#define __TC_MYSQL_H

#include <mysql.h>

namespace mysqlHelper
{
class TC_Mysql 
{
public:
    /**
    * @brief 建構函式
    */
    TC_Mysql();

protected:
    /**
    * @brief copy contructor,只申明,不定義,保證不被使用 
    */
    TC_Mysql(const TC_Mysql &tcMysql);

    /**
    * @brief 只申明,不定義,保證不被使用
    */
    TC_Mysql &operator=(const TC_Mysql &tcMysql);

private:
    /**
    * 資料庫指標
    */
    MYSQL *_pstMql;
};
}
#endif 
//原始檔tc_mysql.cpp
#include "tc_mysql.h"

namespace taf
{
    TC_Mysql::TC_Mysql():_bConnected(false){
        _pstMql = mysql_init(NULL);
    }
}

聰明的你也許發現了問題的原因,但是我當時卻困惑了很久,百度和google許久都沒有解決問題,最後才發現端倪,真的是被自己坑了,原來使用名稱空間的時候標頭檔案和原始檔的名稱空間不一致所導致的問題。

寫程式碼,真的要細心,切勿粗心啊!!!

相關文章