当我在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!");
}
答案 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.cpp
和main.cpp
中包含此头文件
答案 1 :(得分:0)
您在模块IO.cpp
main.cpp
#include "IO.cpp"
所以你已经在两个模块中得到了函数定义:IO.cpp
和main cpp
您应该为示例IO.h
创建一个头文件,并将所有函数声明放在那里。然后,您必须在IO.cpp
和main.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>
//...