在 interface.h 中定义 strInterface
// interface.h #ifndef INTERFACE_H_ #define INTERFACE_H_ const char* strInterface = "the difference between char* and char array"; #endif
在 OneUsing 类中,调用 strInterface 字符串
// oneUsingInterface.h #ifndef ONEUSINGINTERFACE_H_ #define ONEUSINGINTERFACE_H_ class OneUsing { private: int mData; public: OneUsing(); OneUsing(int a); void print(); }; #endif // ONEUSINGINTERFACE_H_ // oneUsingInterface.cpp #include "oneUsingInterface.h" #include "interface.h" #include <iostream> using namespace std; OneUsing::OneUsing() {} OneUsing::OneUsing(int a) { mData = a; } void OneUsing::print() { cout<<"mData: "<<mData<<" strInterface: "<<strInterface<<endl; }
在 main.cpp 中,包含 interface.h,因为 strInterface 被直接调用;它还包括 oneUsingInterface.h,因为将创建 OneUsing 实例。
//main.cpp #include <iostream> #include "interface.h" #include "oneUsingInterface.h" using namespace std; int main() { cout<<strInterface<<endl; OneUsing* pObject = new OneUsing(5); pObject->print(); }
现在,出现的问题:
g++ -I../boost_1_52_0/installation/prefix/include -I../boost_1_52_0/installation/prefix/lib -g -Wall -Wextra -c .//main.cpp g++ -I../boost_1_52_0/installation/prefix/include -I../boost_1_52_0/installation/prefix/lib -g -Wall -Wextra -c .//oneUsingInterface.cpp g++ -I../boost_1_52_0/installation/prefix/include -I../boost_1_52_0/installation/prefix/lib -g -Wall -Wextra main.o oneUsingInterface.o -o main oneUsingInterface.o:(.data+0x0): multiple definition of `strInterface' main.o:(.data+0x0): first defined here collect2: error: ld returned 1 exit status make: *** [main] Error 1
但是,如果 strInterface 是这样定义的,那么就没有问题了:
// interface.h #ifndef INTERFACE_H_ #define INTERFACE_H_ const char strInterface[] = "the difference between char* and char array"; #endif
有些人可以告诉我更多关于这种情况下char*
和之间区别的细节吗?char[]
PS:我们经常在头文件中用关键字声明全局变量,extern
在别人的实现文件中定义。