C++ VS 2017 C++;编译问题
我的VS2017有问题。每次我在class.cpp文件中更改我的方法主体(例如,乘法)时,我都必须重写main函数中的指令。也就是说,如果我有一个a=b*c;语句我必须在“test.cpp”的main中删除并再次添加乘法符号,然后编译。否则,VS将不会在我的方法中包含更改,并将充当方法实现中根本没有更改的角色 提前谢谢 编辑 这是我试图修复的代码:C++ VS 2017 C++;编译问题,c++,C++,我的VS2017有问题。每次我在class.cpp文件中更改我的方法主体(例如,乘法)时,我都必须重写main函数中的指令。也就是说,如果我有一个a=b*c;语句我必须在“test.cpp”的main中删除并再次添加乘法符号,然后编译。否则,VS将不会在我的方法中包含更改,并将充当方法实现中根本没有更改的角色 提前谢谢 编辑 这是我试图修复的代码: template<typename T> Mx::Matrix<T>::Matrix(unsigned rows, unsi
template<typename T>
Mx::Matrix<T>::Matrix(unsigned rows, unsigned cols, T const & init_val)
{
_matrix.resize(rows);
for (unsigned i = 0; i < _matrix.size(); i++)
_matrix[i].resize(cols, init_val);
_rows = rows;
_cols = cols;
}
template<typename T>
Mx::Matrix<T>::Matrix(Matrix<T> const & mx)
{
_matrix = mx._matrix;
_rows = mx.GetRows();
_cols = mx.GetCols();
}
template<typename T>
Mx::Matrix<T> & Mx::Matrix<T>::operator=(Matrix<T> const & mx)
{
if (this == &mx)
return *this;
unsigned new_rows = mx.GetRows();
unsigned new_cols = mx.GetCols();
_matrix.resize(new_rows);
for (unsigned i = 0; i < _matrix.size(); i++)
_matrix[i].resize(new_cols);
for (unsigned i = 0; i < new_rows; i++) {
for (unsigned j = 0; j < new_cols; j++) {
_matrix[i][j] = mx(i, j); // musisz przeciazyc operator()()
}
}
_cols = new_cols;
_rows = new_rows;
return *this;
}
template<typename T>
Mx::Matrix<T> Mx::Matrix<T>::operator+(Matrix<T> const & mx) const
{
Mx::Matrix<T> temp(mx); // ALBO Mx::Matrix<T> temp(_rows, _cols, 0.0)
for (unsigned i = 0; i < this->GetRows(); i++) {
for (unsigned j = 0; j < this->GetCols(); j++) {
temp(i, j) = (*this)(i, j) + mx(i, j); // ALBO this->_matrix[i][j]
}
}
return temp;
}
template<typename T>
Mx::Matrix<T>& Mx::Matrix<T>::operator+=(Matrix<T> const & mx)
{
return *this = *this + mx;
}
template<typename T>
Mx::Matrix<T> Mx::Matrix<T>::operator-(Matrix<T> const & mx) const
{
Mx::Matrix<T> temp(mx); // ALBO Mx::Matrix<T> temp(_rows, _cols, 0.0)
for (unsigned i = 0; i < this->GetRows(); i++) {
for (unsigned j = 0; j < this->GetRows(); j++) {
temp(i, j) = (*this)(i, j) - mx(i, j); // ALBO this->_matrix[i][j]
}
}
return temp;
}
template<typename T>
Mx::Matrix<T>& Mx::Matrix<T>::operator-=(Matrix<T> const & mx)
{
return *this = *this - mx;
}
template<typename T>
Mx::Matrix<T> Mx::Matrix<T>::operator*(Matrix<T> const & mx)
{
unsigned rows = mx.GetRows();
unsigned cols = this->GetRows();
Mx::Matrix<T> temp(rows, cols, 0.0);
for (unsigned i = 0; i < rows; i++) {
for (unsigned j = 0; j < cols; j++) {
for (unsigned k = 0; k < rows; k++) {
temp(i, j) += (*this)(i, k) * mx(k, j);
}
}
}
return temp;}
模板
矩阵(无符号行、无符号列、T常量和初始值)
{
_矩阵。调整大小(行);
对于(无符号i=0;i<_matrix.size();i++)
_矩阵[i]。调整大小(cols,init_val);
_行=行;
_cols=cols;
}
样板
Mx::Matrix::Matrix(矩阵常量和Mx)
{
_矩阵=mx.\u矩阵;
_rows=mx.GetRows();
_cols=mx.GetCols();
}
样板
Mx::矩阵和Mx::矩阵::运算符=(矩阵常量和Mx)
{
if(this==&mx)
归还*这个;
未签名的新行=mx.GetRows();
未签名的new_cols=mx.GetCols();
_矩阵。调整大小(新的_行);
对于(无符号i=0;i<_matrix.size();i++)
_矩阵[i]。调整大小(新列);
for(无符号i=0;iGetRows();i++){
对于(无符号j=0;jGetCols();j++){
temp(i,j)=(*this)(i,j)+mx(i,j);//albothis->_矩阵[i][j]
}
}
返回温度;
}
样板
Mx::Matrix和Mx::Matrix::operator+=(矩阵常量和Mx)
{
return*this=*this+mx;
}
样板
Mx::矩阵Mx::矩阵::运算符-(矩阵常量和Mx)常量
{
Mx::矩阵温度(Mx);//ALBO Mx::矩阵温度(_行,_列,0.0)
对于(无符号i=0;iGetRows();i++){
对于(无符号j=0;jGetRows();j++){
temp(i,j)=(*this)(i,j)-mx(i,j);//albothis->_矩阵[i][j]
}
}
返回温度;
}
样板
Mx::Matrix和Mx::Matrix::operator-=(矩阵常量和Mx)
{
返回*this=*this-mx;
}
样板
Mx::矩阵Mx::矩阵::运算符*(矩阵常量和Mx)
{
unsigned rows=mx.GetRows();
unsigned cols=this->GetRows();
矩阵温度(行,列,0.0);
for(无符号i=0;i
在我在这里(或项目中的任何地方)进行每次更改之后,我必须做一些愚蠢的事情,从语句中删除一个字母(int main()),然后再次添加它,以便VS可以将我的更改包含在class.cpp文件中…您共享的代码来自class.cpp文件?它必须全部位于头文件中,或者至少包含在头文件中,正如@manni66在对问题的评论中提到的那样。参见请获取、阅读并向我们展示相关代码。欢迎来到SO。欢迎来到堆栈溢出。请复习。您的问题应包括您的特定编码相关问题的清晰大纲、您已经尝试的内容的摘要以及中的相关代码,以便我们有足够的信息提供帮助。cpp中没有实现模板。是的,请扩展您的问题。与此问题相关的是“matrix.hpp”include文件(如果有),它是如何从主文件from
class.cpp
中包含的。但目前MANN66的说法似乎是对的:模板的实现应该在头文件中(不像普通C++类)