c++ - 从文件 : constructor taking std:ifstream& as argument 实例化

标签 c++

我希望有一个类构造函数来从文件中读取值,所以我定义了一个这样的类:

#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/

相关文章:

c++ - 如何在 Windows 上有效使用 PortAudio Pa_OpenStream()?

c++ - 在 Windows 7 上连接到高于 10 的 COM 端口时出现无效句柄错误

c++ - 表现。寻找子串。 substr 与查找

c++ - Linux 上 std::map 的内存对齐问题

c++ - 使用 std::enable_if 时进行优化

c++ - 我认为数组是不可复制的

c++ - 前缀/后缀增量

c++ - 是否有标准方法可以在编译时确定系统是 32 位还是 64 位?

c++ - 在 Arduino 草图中包含 .cpp 和 .h 文件的正确方法

c++ - 我在神经网络中实现反向传播时遇到问题