gpt4 book ai didi

c++ - 为什么我在编译模板类时遇到问题?

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:39 24 4
gpt4 key购买 nike

我在这段代码上停留了一段时间,无法编译,我到底做错了什么?如果编译时出现错误,请忽略它们,因为我可以自行修复。截至目前,我只是想让它运行。提前谢谢你。

#include <iostream>
#include <string.h>

//template <class t> class Matrix; //possible way of fixing the friend function.

using namespace std;
template<class T, size_t NROWS, size_t NCOLS>
std::ostream & operator<<(std::ostream &os, const Matrix<T,NROWS, NCOLS> &matrix);


template<class T, size_t NROWS = 1, size_t NCOLS = 1>
class Matrix{
public:
Matrix(){}
friend std::ostream &operator<< <>(std::ostream&os,const Matrix<T, NROWS, NCOLS> &matrix);

private:
T container[NROWS][NCOLS];
};


template<class T,size_t NROWS, size_t NCOLS>
std::ostream &operator<<(std::ostream &os,const Matrix<T,NROWS,NCOLS>&matrix){
for(size_t i=0;i<NROWS;++i){
for(size_t j=0;j<NCOLS;++j){
os <<matrix.container[i][j]<<" ";
}
os <<std::endl;
}
os <<std::endl;
}


int main(){
Matrix<float, 10, 5> mat;
cout << mat;
return 0;
}

我使用的IDE报错如下:

main.cpp:8:51: error: no template named 'Matrix' std::ostream & operator<<(std::ostream &os, const Matrix &matrix);

main.cpp:15:24: error: no function template matches function template specialization 'operator<<' friend std::ostream &operator<< <>(std::ostream&os,const Matrix &matrix);

main.cpp:35:32: note: in instantiation of template class 'Matrix' requested here Matrix mat;

最佳答案

如果您取消第 4 行的注释,并按如下方式更改它,您的代码将编译:

template <class t, size_t, size_t> class Matrix; //possible way of fixing the friend function.

您的问题似乎是前向声明的 Matrix 模板参数与稍后出现的 Matrix 定义不匹配。

此外,尽管此修复后代码将编译,但仍然存在您可能也想修复的警告:

In function 'std::ostream& operator<<(std::ostream&, const Matrix<T, NROWS, NCOLS>&)':
31:1: warning: no return statement in function returning non-void [-Wreturn-type]

关于c++ - 为什么我在编译模板类时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com