-1

可能重复:
什么是未定义的引用/未解决的外部符号错误,我该如何解决?

有人想为我节省一些关于类和构造函数如何在 c++ 中工作的时间?这就是我得到的 - 它不起作用。我希望这个类有一个构造函数,它接受一个文件名并从文件系统中读取一个具有该名称的文件。

这是标题和实现

#ifndef __narcissism__Histogram__
#define __narcissism__Histogram__

#include <iostream>
#include <sstream>  // for ostringstream
#include <iomanip>  // for setw, setfill
#include <ios>      // for hex stream manipulator
using namespace std;
#include "random.h" // for randomInteger
#include "strlib.h" // for integerToString
#include "error.h"  // for error



class Histogram {
public:

/** Constructor:
  * 
  *  */
Histogram(string filename)
{
    readfile(filename);

}


private:

int readfile(string filename);

};




#endif /* defined(__narcissism__Histogram__) */

*.cpp

 #include "Histogram.h"



 int readfile(string filename)
 {
 return 0;
 }

错误信息:

Undefined symbols for architecture i386:
"Histogram::readfile(std::string)", referenced from:
  Histogram::Histogram(std::string) in narcissism.o
ld: symbol(s) not found for architecture i386
4

2 回答 2

2

您必须添加Histogram::成员函数的定义:

 int Histogram::readfile(string filename)
 {
 return 0;
 }

否则它将定义一个具有相同名称的新全局函数,而成员函数未定义。

于 2012-11-12T10:18:00.253 回答
2

您的错误是 readfile 是 Histogram 的成员,因此在 .cpp 文件中它应该是:

int Histogram::readfile( string filename )
{
     // implement
}

您编写的函数实际上在这一点上是一个有效的函数。(如果它试图访问任何直方图的成员,它将在编译中失败,这可能是 readfile 的正确实现:目的肯定是从它从文件中读取的数据中设置这些成员)。

相反,您得到了一个链接错误,因为没有为名为 readfile 的函数定义实现,该函数是 Histogram 类的成员。

于 2012-11-12T10:18:42.270 回答