这可能是一个简单的错误,但我无法理解为什么以下编译正常,我期望:
class Foo {
public:
class Bar {
public:
Bar(unsigned int a, unsigned int b) { }
};
};
int main(int argc, char** argv) {
Foo::Bar blah(1, 2);
return 0;
}
虽然这不能编译:
A.cpp
#include "B.h"
int main(int argc, char** argv) {
Foo::Bar blah(1, 2);
return 0;
}
B.h
#ifndef A_INCLUDED
#define A_INCLUDED
class Foo {
public:
class Bar {
public:
Bar(unsigned int a, unsigned int b);
};
};
#endif
C.cpp
#include "B.h"
Foo::Bar::Bar(unsigned int a, unsigned b) {
}
使用GCC 4.8.1(将Sublime Text 3作为IDE)生成以下构建错误
C:\用户\ ALEXAN〜1 \应用程序数据\本地\ TEMP \ ccMujUOG.o:A.cpp :(文本+ 0x2B访问): 未定义的引用`Foo :: Bar :: Bar(unsigned int,unsigned int)' collect2.exe:错误:ld返回1退出状态[完成0.3s]
当然,第二个片段应该与第一个片段相同,但在更多文件中解构,因为我想要使用的“真实代码”显然比这个例子大。
答案 0 :(得分:0)
正如@thang所说,这是一个链接器问题。 Sublime Text更像是一个带有IDE功能的文本处理器而不是真正的IDE。它可以很好地构建单个文件,但不能构建如下所述的多文件项目:
Sublime Text not compiling multi-file projects in C++
解决这个问题的方法是使用命令行,然后使用以下命令:
g++ C.cpp A.cpp -o test
答案 1 :(得分:0)
尝试分离类并使用以下方法实例化类: 新
有时编译器会抱怨内部类,
答案 2 :(得分:0)
以下是详细说明的步骤:
编译您的实现
g ++ -c C.cpp A.cpp
创建exe的链接
g ++ -o myexe C.o A.o