2011-03-18 126 views
0

試圖編譯我上課的時候,我得到一個錯誤。錯誤:預期的構造函數,析構函數或類型轉換之前「::」令牌

錯誤:

Matrix.cpp:13:錯誤:預期構造,析構函數,或類型之前 '::' 令牌

Matrix.h

#ifndef _MATRIX_H 
#define _MATRIX_H 

template <typename T> 
class Matrix { 
public: 
    Matrix(); 
    ~Matrix(); 
    void set_dim(int, int);  // Set dimensions of matrix and initializes array 
    unsigned int get_rows(); // Get number of rows 
    unsigned int get_cols(); // Get number of columns 
    void set_row(T*, int);  // Set a specific row with array of type T 
    void set_elem(T*, int, int);// Set a specific index in the matrix with value T 
    bool is_square();   // Test to see if matrix is square 
    Matrix::Matrix add(Matrix); // Add one matrix to another and return new matrix 
    Matrix::Matrix mult(Matrix);// Multiply two matrices and return new matrix 
    Matrix::Matrix scalar(int); // Multiply entire matrix by number and return new matrix 

private: 
    unsigned int _rows;   // Number of rows 
    unsigned int _cols;   // Number of columns 
    T** _matrix;    // Actual matrix data 

}; 

#endif /* _MATRIX_H */ 
轉換

Matrix.cpp

#include "Matrix.h" 
template <typename T> 
Matrix<T>::Matrix() { 
} 

Matrix::~Matrix() { // Line 13 
} 

的main.cpp

#include <stdlib.h> 
#include <cstring> 
#include "Matrix.h" 

int main(int argc, char** argv) { 
    Matrix<int> m = new Matrix<int>(); 
    return (EXIT_SUCCESS); 
} 
+1

'_MATRIX_H'是一個保留標識符(你不能在你的程序中使用它,它是編譯器使用)。任何以下劃線開頭且後跟大寫字母的標識符都是保留的。考慮改用'MATRIX_H_'。 – 2011-03-18 22:49:08

+0

另外,Matrix :: Matrix add(Matrix);'是錯誤的。它應該是'Matrix add(Matrix);'。更符合的編譯器會拒絕這樣的代碼。 – 2011-03-19 00:35:19

回答

6
Matrix::~Matrix() { } 

Matrix是一個類模板。你有正確的構造函數定義;析構函數(和任何其他成員函數定義)需要匹配。

template <typename T> 
Matrix<T>::~Matrix() { } 

Matrix<int> m = new Matrix<int>(); 

這是行不通的。 new Matrix<int>()產生一個Matrix<int>*,與您不能初始化Matrix<int>。你並不需要在這裏任何初始化,下面將聲明一個局部變量,並調用默認的構造函數:

Matrix<int> m; 
+0

這個工作,但現在我收到以下內容:main.cpp中:13:未定義的引用'矩陣 ::矩陣()」 – 2011-03-18 22:53:11

+0

而且,隨着奧列格正確地指出(+1爲!),你可以不分開類模板成員運行到.cpp文件中:他們必須進入.h文件。其它更多的在[Parashift C++ FAQ(http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12) – 2011-03-18 22:53:50

+0

稀釋。所以我應該只在頭文件中實現整個庫?謝謝,你似乎回答了我的大部分問題。 – 2011-03-18 22:55:58

3

定義析構函數

template <typename T> 
Matrix<T>::~Matrix() { 
} 

和其他錯誤是,你不能把實現類的模板的.cpp文件Template Factory Pattern in C++

相關問題