在Eclipse中构建项目时出错

时间:2014-08-30 17:27:27

标签: c++ eclipse

当我在eclipse中编译C ++项目时,它向我显示错误,指出IO.cpp中的所有函数都已定义。

这是我的代码:

文件:IO.cpp

#include <string>
#include <iostream>

using namespace std;

void print(string line) {
    cout << line;
}

void println(string line) {
    cout << line << endl;
}

void printError(string message, string error, string file) {
    cout << "An error occurred!" << endl;
    cout << "Message: "+ message << endl;
    cout << "Error: "+ error << endl;
    if(file != "") {
        cout << "File/Method: "+ file << endl;
    }
}

文件:main.cpp

#include <string>
#include <iostream>
#include "IO.cpp"

using namespace std;

int main()
{
    println("Hello world!");
}

2 个答案:

答案 0 :(得分:0)

您应该从main.cpp

中删除以下行
#include "IO.cpp"

并在using namespace std

之后添加以下行
void print(string line);
void println(string line);
void printError(string message, string error, string file);

如果再次包含cpp文件,该文件也存在于项目源列表中(要编译的文件),则程序将获得C ++中不允许的相同功能的多个定义。另一方面,这里建议的替代方案包括函数声明,允许多次出现,但必须在首次使用前至少出现一次。

标准做法是在头文件中移动声明(例如IO.h)并在IO.cppmain.cpp中包含此头文件

进一步阅读:
Difference between declarations and definitions

答案 1 :(得分:0)

您在模块IO.cpp

中添加了模块main.cpp
#include "IO.cpp"

所以你已经在两个模块中得到了函数定义:IO.cppmain cpp

您应该为示例IO.h创建一个头文件,并将所有函数声明放在那里。然后,您必须在IO.cppmain.cpp

中包含此标头文件

例如

<强> IO.h

#include <string>


void print( std::string line);

void println( std::string line);

void printError( std::string message, std::string error, std::string file);

<强> IO.cpp

#include <string>
#include <iostream>
#include <IO.h>

using namespace std;

void print(string line) {
    cout << line;
}

void println(string line) {
    cout << line << endl;
}

void printError(string message, string error, string file) {
    cout << "An error occurred!" << endl;
    cout << "Message: "+ message << endl;
    cout << "Error: "+ error << endl;
    if(file != "") {
        cout << "File/Method: "+ file << endl;
    }
}

<强>的main.cpp

#include <IO.h>

//...