C++ g++;对构造函数的未定义引用,非常简单的代码
我做了一个程序,在课堂上测试我的知识,但我遇到了一些麻烦 foo.h:C++ g++;对构造函数的未定义引用,非常简单的代码,c++,C++,我做了一个程序,在课堂上测试我的知识,但我遇到了一些麻烦 foo.h: #include <iostream> using namespace std; class foo { private: int a; public: foo(); }; 我认为这里应该有一个非常愚蠢的错误,但我真的找不到。我整晚都在挣扎 谢谢你的帮助 您应该编译所有源文件(.cc,在您的情况下): 您要求编译器不仅要翻译main.cc,还要执行最终链接以生成可执行文件ma
#include <iostream>
using namespace std;
class foo
{
private:
int a;
public:
foo();
};
我认为这里应该有一个非常愚蠢的错误,但我真的找不到。我整晚都在挣扎
谢谢你的帮助 您应该编译所有源文件(
.cc
,在您的情况下):
您要求编译器不仅要翻译
main.cc
,还要执行最终链接以生成可执行文件main
。无法执行第二步,因为main.cc
引用了函数foo::foo
,该函数的定义位于foo.cc
中,因此编译器无法使用该函数。您可以这样做:
g++ main.cc -c -o main.o
g++ foo.cc -c -o foo.o
g++ main.o foo.o -o main
-c
标志使编译器仅执行翻译,因此这将分别编译main.cc
和foo.cc
,然后将对象链接在一起以获得可执行文件。这样,foo::foo
的定义将在foo.o
中结束,并在链接时可用
或者,您可以同时提供.cc
文件。这与上面的三个命令基本相同:
g++ main.cc foo.cc -o main
当您在
foo.cc
中实现foo
的构造函数时,您应该编译它
使用
g++main.cc foo.cc-o main
g++-o main.cc foo.cc
既然您从未向编译器提到过foo.cc
,您希望编译器如何了解foo.cc
以及foo.cc
中定义的任何内容?
-bash-4.1$ g++ main.cc -o main
/tmp/cc5Hnes8.o: In function `main':
main.cc:(.text+0x10): undefined reference to `foo::foo()'
collect2: ld returned 1 exit status
g++ main.cc foo.cc -o main
g++ main.cc -c -o main.o
g++ foo.cc -c -o foo.o
g++ main.o foo.o -o main
g++ main.cc foo.cc -o main