在C ++中,我无法链接源代码文件及其头文件。我将这两个文件保存在同一个文件夹/目录中。此外,我正在使用另一个导入头文件的类,它是应用程序的startng点,但是当我编译时,我收到以下错误消息:
C:\ Users \ SONY-V~1 \ AppData \ Local \ Temp \ ccetXYNN.o Marksheet_Test.cpp :(。text + 0x74): 未定义的引用`Marksheet :: Marksheet(std :: string, 的std :: string)'
C:\ Users \ SONY-V~1 \ AppData \ Local \ Temp \ ccetXYNN.o Marksheet_Test.cpp :(。text + 0xa9): 对Marksheet :: dispmessage()'
的未定义引用e:\ education \ dev-cpp \ mingw32 \ mingw32 \ bin \ ld.exe C:\ Users \ SONY-V~1 \ AppData \ Local \ Temp \ ccetXYNN.o: 部分中的错误重定位地址0x13 `的.text $ _ZN9MarksheetD1Ev [__ ZN9MarksheetD1Ev]'
e:\ education \ dev-cpp \ mingw32 \ mingw32 \ bin \ ld.exe最终链接失败: 操作无效
E:\ Education \ C ++ programming \ collect2.exe [错误] ld返回1退出 状态
此处Marksheet
是一个cpp文件,其中我正在制作标题,Marksheet_Test
是应用程序的起点。
有人可以帮我解决这个问题吗?
代码如下: 这是Marksheet_Test的代码
#include "Marksheet.h"
using namespace std;
int main()
{
Marksheet obj1("Pransanjeet Majumder","IT 114 Objject Oriented programming");
obj1.dispmessage();
}
以下代码是Marksheet.cpp
#include<iostream>
#include "Marksheet.h"
using namespace std;
class Marksheet{
Marksheet::Marksheet(string cname,string instname){
setCoursename(cname);
setinstname(instname);
}
void Marksheet::setCoursename(string cname)
{
coursename=cname;
}
void Marksheet::setinstname(string insname){
instname=insname;
}
string Marksheet::getCoursename()
{
return coursename;
}
string Marksheet::getinstname()
{
return instname;
}
void Marksheet::dispmessage()
{
cout<<"Welcome to the "<<coursename<<"\n";
cout<<"This course is offered by Prof."<<instname<<endl;
}
};
以下代码是Marksheet.h头文件
#include<string>
using namespace std;
class Marksheet
{
public:
Marksheet(string,string);
void setCoursename(string);
string getCoursename();
void dispmessage();
void setinstname(string);
string getinstname();
private:
string coursename;
string instname;
};
我正在使用DEVC ++编译器来编译代码
答案 0 :(得分:4)
您的实施周围有class Marksheet
是不必要的。
将Marksheet.cpp更改为:
#include<iostream>
#include "Marksheet.h"
using namespace std;
Marksheet::Marksheet(string cname,string instname) {
setCoursename(cname);
setinstname(instname);
}
void Marksheet::setCoursename(string cname) {
coursename=cname;
}
void Marksheet::setinstname(string insname) {
instname=insname;
}
string Marksheet::getCoursename() {
return coursename;
}
string Marksheet::getinstname() {
return instname;
}
void Marksheet::dispmessage() {
cout<<"Welcome to the "<<coursename<<"\n";
cout<<"This course is offered by Prof."<<instname<<endl;
}
请注意,定义文件中没有class
。
您正在做的是声明一个名为Marksheet
的新类,然后尝试define
它自己的成员而不声明它们。此外,您不应该在头文件中添加using
声明,因为包含它们的任何类也必须使用相同的声明。这可能导致在编译时很难找到冲突。