0

我尝试使用 c++ 将一个类放在一个单独的文件中,但不包括 .cpp 文件,它不起作用。

这是类示例的 CPP 文件

//Example.cpp
#include "Example.h"
#include<iostream>
using namespace std;

Example::Example()
{
    cout<<"I am am Executed\n";
} 

这是头文件

//Example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H


class Example
{
    public:
        Example();
};
#endif

现在如果我不将 C++ 文件包含到我的主函数文件中,它会给出一个错误

#include "Example.h"
//#include "Example.cpp"
#include<iostream>
using namespace std;
int main()
{
    Example aak;
    return 0;
}

所以在这里我注释掉了//#include "Example.cpp",它会给我一个错误,说明

/tmp/ccuHMRJB.o: In function `main':
main.cpp:(.text+0x10): undefined reference to `Example::Example()'
collect2: ld returned 1 exit status

但是,如果我取消注释 #include "Example.cpp" 它工作得很好!给我一个输出

我被执行了!

我不明白为什么我需要包含两个文件(.h 和 .cpp)来执行程序。只要我认为它应该只包含 .h 文件就可以工作,但它没有......

4

2 回答 2

1

您不应该.cpp其他文件中包含.cpp文件。相反,.cpp在编译器命令行上列出构成您的项目的所有文件。

于 2013-03-08T18:22:45.020 回答
0

这是因为当您包含 cpp 文件时,该文件(即函数)也在被编译。但是,当您包含原型文件,即头文件时,您还必须指定在何处搜索功能代码的可执行代码。表示链接器将在哪里找到您以二进制形式(已编译)存储 cpp 文件的库,否则需要对其进行编译。我认为后一种情况是你的情况(即你没有从你的 cpp 文件创建一个库)。现在想想如果你不包含 cpp 文件,它就不会被编译。然后你正在调用一个二进制代码不存在的函数。


因此,如果您不包含 cpp 文件,链接器将引发错误

于 2013-03-08T18:25:01.743 回答