【问题标题】:facing error in linking codes in c++ [duplicate]在c ++中链接代码时面临错误[重复]
【发布时间】:2014-06-18 11:54:58
【问题描述】:

在 C++ 中,我无法链接源代码文件及其头文件。我将这两个文件保存在同一个文件夹/目录中。另外我正在使用另一个导入头文件的类,它是应用程序的起点,但是当我编译时,我收到以下错误消息:

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

【问题讨论】:

  • 向我们展示您的 Marksheet_Test.cpp。您是否在其中#include 了所有必要的文件?
  • 代码在哪里?你是怎么编译的?

标签: c++


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 2014-08-11
相关资源
最近更新 更多