在c ++中链接代码时遇到错误

时间:2014-06-18 11:54:59

标签: c++

在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 ++编译器来编译代码

1 个答案:

答案 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声明,因为包含它们的任何类也必须使用相同的声明。这可能导致在编译时很难找到冲突。