0

我为一个类创建了我的头文件,并在 main.cpp 中#included“theclassname.h”,但是当我尝试编译时,我得到“未定义的对”ClassName::TheConstructor(bool, int*, std::basic_string, std: :分配器>)""

我在我的 Classname.cpp 文件中编写了构造函数和一个名为“ClassName::start”的函数,但由于某种原因,它为此启动函数和我的析构函数提供了这个未定义的参考问题,它也被编码在我的 cpp 文件中。我在 main 中对在头文件中编码的函数进行的每次调用都不会触发此错误,但对在我的 .cpp 文件中编码的函数进行的每次调用都会触发此错误。

我已经看过很多关于此的帖子,但我已经使用正确的参数和返回类型正确地对它们进行了编码,并确保函数名称与头文件中定义的名称相同。除了拼写错误之外,还有什么可能导致这种情况,因为我已经检查了 10 多次。

谢谢

#ifndef THECLASSNAME_H
#define THECLASSNAME_H
#include <iostream>

class TheClassName {
 public:
   TheClassName(bool theBool=true, int *theArray=0,
        std::string message="-1");
~TheClassName();
void start();
void setBool(bool theBool) {aBool=theBool;}
 bool getBool() {return aBool;}
 void setMessage(std::string message) {mssg=message;}
 std::string getMessage() {return mssg;}
 std::string getHello() {return hello;}
private:
int *anArray;
bool aBool;
std::string mssg;
std::string hello;

void aFunction1(bool);
void aFunction2();
void aFunction3();

void aFunction4();
};

 #endif

对不起大家刚刚修好了!在我的makefile中我做了

exec1: main.o classname.o
     g++ -o exec1 main.o

代替

exec1: main.o classname.o
     g++ -o exec1 main.o classname.o

非常感谢你们!

4

2 回答 2

2

That sounds like you're getting the error at the linker phase. Are you also compiling the file that you have the C++ class definition in and not just including the header file? You need to have a separate C++ file with the function definitions for you class, compile this file as well and include the object file in the linker command line so you don't get your undefined reference errors when you link the final executable.

于 2012-04-30T15:48:00.620 回答
1

如果可能,请发布您的代码并发布构建命令和输出。

这是一个链接而不是编译问题,听起来包含您的构造函数和析构函数声明的编译单元尚未链接到可执行文件中 - 换句话说,链接器找不到您的函数。

于 2012-04-30T15:50:55.110 回答