c++ - LINK2019 中对运算符>> 的 undefined reference 结果

标签 c++ operator-overloading

我已经重载了 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/

相关文章:

c++ - 使用 QTextStream 读取正在写入的文件?

C++程序使时间显示在背景上连续显示

c++ - 通过传递不同的参数创建对象

c++ - 使用一个 '\n' 打印

c++ - 运算符 []= 重载?

c++ - 性能断言

c++ - 如何避免 C 和 C++ 中的命名空间冲突

operator-overloading - 定义 equals() 运算符的问题

c++ - enable_if 和转换运算符?

c++ - "The C++ Programming Language"部分错误 "23.4.7 Friends"