我已经重载了 operator>>
以像这样从文件中读取:
矩阵.h
class Matrix {
// member functions
};
// declared outside the class
std::istream& operator>>(std::istream& is, const Matrix& rhs);
矩阵.cpp
std::istream& operator>>(std::istream& is, Matrix& rhs)
{
std::string line;
std::istringstream iss;
std::getline(is, line); // grab first line
iss.str(line);
// Follows:
// http://http://en.cppreference.com/w/cpp/container/vector/vector
// http://en.cppreference.com/w/cpp/iterator/istream_iterator
// Avoids:
// https://en.wikipedia.org/wiki/Most_vexing_parse
std::vector<int> dim( (std::istream_iterator<int>(iss)),
std::istream_iterator<int>() );
rhs.setRows(dim[0]);
rhs.setCols(dim[1]);
int curr_r = 0;
while (std::getline(is, line))
{
iss.str(line);
std::vector<double> row( (std::istream_iterator<int>(iss)),
std::istream_iterator<int>() );
rhs.insRow(curr_r, row);
curr_r++;
}
return is;
}
main.cpp
#include "matrix.h"
#include <fstream>
#include <iostream>
int main(int argc, char ** argv)
{
ifstream inf(argv[1]);
Matrix M;
while (inf >> M) {}
return 0;
}
我根据 this 在类外声明了它所以发帖。使用 VS2017 我收到了 LINK2019错误,当我尝试编译时,我得到:
undefined reference to `operator>>(std::istream&, Matrix const&)'
collect2: error: ld returned 1 exit status
我认为我已经适本地声明/定义了我的 operator>>
重载。想法?
最佳答案
undefined reference to `operator>>(std::istream&, Matrix const&)'
Matrix const &
参数没有定义的运算符。
由于您为 const Matrix &
声明了运算符,因此您必须为 const Matrix &
定义,而不是
std::istream& operator>>(std::istream& is, Matrix& rhs)
{
. . .
}
只需添加常量:
std::istream& operator>>(std::istream& is,const Matrix& rhs)
{
. . .
}
关于c++ - LINK2019 中对运算符>> 的 undefined reference 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490224/