C++ C++;类和构造函数

C++ C++;类和构造函数,c++,class,constructor,C++,Class,Constructor,可能重复: 有人想给我节省时间,看看C++中的类和构造函数是如何工作的?这就是我得到的——它不起作用。我希望这个类有一个构造函数,它接受一个文件名并从文件系统中读取一个具有该名称的文件 这是标题和实现 #ifndef __narcissism__Histogram__ #define __narcissism__Histogram__ #include <iostream> #include <sstream> // for ostringstream #inclu

可能重复:

有人想给我节省时间,看看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__) */
错误消息:

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

必须在成员函数的定义中添加
直方图::

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

否则,它将使用相同的名称定义一个新的全局函数,而不定义成员函数。

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

int Histogram::readfile( string filename )
{
     // implement
}
您编写的函数实际上是一个有效的函数。(如果它试图访问任何直方图的成员,则编译失败,这可能是readfile的正确实现:其目的肯定是根据从文件读取的数据设置这些成员)


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

在*.cpp文件中,您需要在readfile的定义前面加上类的名称,即
int-Histogram::readfile
不要使用双下划线。带双下划线的名字是保留的。这是一个非常糟糕的问题。你怎么会想到一个函数只是返回零除了零返回什么?特别是“一个常见的错误是忘记资格名”Luchian Grigore是非常了解C++和C++史上的问题,在StaskOfFuff.com上问。
int Histogram::readfile( string filename )
{
     // implement
}