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
}