我希望有一个类构造函数来从文件中读取值,所以我定义了一个这样的类:
#include<iostream>
#include<fstream>
#include<string>
class aClass
{
float value;
public:
aClass(float v) : value(v) {}
aClass(const aClass& other): value(other.value) {}
static aClass initFromFile(std::ifstream &);
};
aClass initFromFile(std::ifstream &is)
{
std::string strBuffer;
std::getline(is, strBuffer);
float v = std::stof(strBuffer);
return aClass(v);
}
我的问题是关于static initFromFile
构造函数。
然后主程序将打开一个文件,读取一个值并实例化该类:
int main()
{
std::ifstream inFile("value.txt");
aClass cls(aClass::initFromFile(inFile));
}
代码编译通过,但链接时出错:
undefined reference to `aClass::initFromFile(std::basic_ifstream<char, std::char_traits<char> >&)'
为什么 inFile
不是 std::ifstream
?
最佳答案
正如评论中所说:
aClass initFromFile(std::ifstream &is) {}
是自由(非成员)函数的定义。你要
aClass aClass::initFromFile(std::ifstream &is)
相反。
此外,您的复制构造函数是无用的,可以删除。隐式生成的会做同样的事情。
关于c++ - 从文件 : constructor taking std:ifstream& as argument 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48119591/