面对c++中链接代码错误

facing error in linking codes in c++

本文关键字:代码 错误 链接 c++ 面对      更新时间:2023-10-16

在c++中我不能链接源代码文件和它的头文件。我把两个文件保存在同一个文件夹/目录。此外,我正在使用另一个导入头文件的类,它是应用程序的起点,但当我编译时,我得到以下错误信息:

C: SONY-V ~ 1 AppData 本地用户 Temp ccetXYNN。o Marksheet_Test.cpp:(。text + 0 x74):未定义的引用' Marksheet::Marksheet(std::string,std:: string) '

C: SONY-V ~ 1 AppData 本地用户 Temp ccetXYNN。o Marksheet_Test.cpp:(。text + 0 xa9):对"Marksheet:: dismessage()"的未定义引用

e: 教育 dev-cpp mingw32 mingw32 bin ld.exe C:Users SONY-V ~ 1 AppData 当地 Temp ccetXYNN.o:节中的坏重定位地址0x13"。text _ZN9MarksheetD1Ev美元[__ZN9MarksheetD1Ev] '

e:educationdev-cppmingw32mingw32binld.exe最后链接失败:无效的操作

E:Education c++ programmingcollect2.exe [Error] ld returned 1 exit

状态

这里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++编译器编译代码

您的实现周围有一个不必要的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声明放在头文件中,因为任何包含它们的类也必须使用相同的声明。这可能导致在编译时很难找到冲突。