这个问题困扰了我好几个小时,真的很痛苦,所以记录一下。
我编译平台是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许久都没有解决问题,最后才发现端倪,真的是被自己坑了,原来使用命名空间的时候头文件和源文件的命名空间不一致所导致的问题。
写代码,真的要细心,切勿粗心啊!!!