在Eclipse中构建项目时出错

Error while building project in Eclipse

本文关键字:出错 项目 构建 Eclipse      更新时间:2023-10-16

当我在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!");
}

您应该从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

进一步阅读:
声明和定义之间的差异

您将模块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>
//...