将类放在单独的文件中不起作用[C ++]

时间:2013-03-08 18:21:17

标签: c++ class

我尝试使用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&#34; Example.cpp&#34; ,它会给我一个错误说明

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

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

  
    

我被执行了!

  

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您应该将.cpp文件添加到项目或makefile中。必须编译.cpp文件并将其链接到您的项目。

并避免在代码中包含.cpp个文件。

在您的情况下,编译器在对象(已编译)文件中查找Example::Example()的正文,但找不到它。

答案 2 :(得分:0)

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


因此,如果您不包含cpp文件

,则链接器会抛出错误