2017-09-23 20 views
-3

私はVS 2017に問題があります。私はclass.cppファイルのメソッド(例えば、掛け算の乗算)のボディを変更するたびに、main関数の命令を書き直さなければなりません。 I.もし私がa = b * cを持っていれば、文私は削除し、 "test.cpp"のメインの乗算シンボルintを再度追加し、コンパイルする必要があります。さもなければ、VSは私のメソッドの変更を含んでおらず、メソッドの実装において全く変更がなかったので動作します。VS 2017 C++コンパイルの問題

この質問本体は、当社の品質基準を満たしていません。あなたがすでに試したことを含め、問題を完全に記述し、適切な文法を使って書かれていることを確認してください。

ありがとうございます。

EDIT これは修正しようとコードのイムです:

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;} 

と私はここに(あるいはどこかのプロジェクトで)作るのすべての変更後、私はいくつかの愚かな声明からの手紙を削除しなければなりません((メインint型))を追加して、再度VSを使用して、class.cppファイルに変更を含めることができます。

+0

[ツアー](https://stackoverflow.com/tour)、[ヘルプページ](https://stackoverflow.com/help)を読んで関連コードを表示してください。ようこそ。 – Ron

+0

ようこそスタックオーバーフロー。 [良い質問をするにはどうすればいいですか](https://stackoverflow.com/help/how-to-ask)をご覧ください。あなたの質問には、*具体的な*コーディング関連の問題の概要、既に試したことの概要、[最小、完全、および検証可能な例]の関連コードが含まれていなければなりません(https://stackoverflow.com/help/mcve)、私たちは十分な情報を持っています。 – FluffyKitten

+0

テンプレートはcppに実装されていません。 –

答えて

0

共有したコードはclass.cppファイルからですか?すべてのヘッダファイル、またはヘッダファイルからインクルードされている必要があります。@ manni66は質問のコメントに記載されています。 Why can templates only be implemented in the header file?

関連する問題