Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;对构造函数的未定义引用,非常简单的代码_C++ - Fatal编程技术网

C++ g++;对构造函数的未定义引用,非常简单的代码

C++ g++;对构造函数的未定义引用,非常简单的代码,c++,C++,我做了一个程序,在课堂上测试我的知识,但我遇到了一些麻烦 foo.h: #include <iostream> using namespace std; class foo { private: int a; public: foo(); }; 我认为这里应该有一个非常愚蠢的错误,但我真的找不到。我整晚都在挣扎 谢谢你的帮助 您应该编译所有源文件(.cc,在您的情况下): 您要求编译器不仅要翻译main.cc,还要执行最终链接以生成可执行文件ma

我做了一个程序,在课堂上测试我的知识,但我遇到了一些麻烦

foo.h:

#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