2010-04-27 41 views
0

搞亂如果我在一個.cpp文件中把這個代碼並運行它,它運行得很好:載體的C++向量與我

#include <iostream> 
#include <vector> 
#include <string> 


using namespace std; 

typedef vector<int> row; 
typedef vector<row> myMatrix; 

void main() 
{ 
    //cout << endl << "test" << endl; 
    myMatrix mat(2,2); 

    mat[0][1] = 2; 

    cout << endl << mat[0][1] << endl; 
} 

但是,如果我做的.h和.cpp文件與這樣的.h文件,它給我船錯誤。

#ifndef _grid_ 
#define _grid_ 

#include<iostream> 
#include<vector> 
#include<string> 

using namespace std; 

typedef vector<int> row; 
typedef vector<row> myMatrix; 

class grid 
{ 
    public: 

     grid(); 

     ~grid(); 

     int getElement(unsigned int ri, unsigned int ci); 

     bool setElement(unsigned int ri, unsigned int ci, unsigned int value); 


    private: 

     myMatrix sudoku_(9,9); 
}; 

#endif 

這些都是一些我得到的錯誤:

warning C4091: 'typedef ' : ignored on left of 'int' when no variable is declared 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
+0

'main()'返回什麼類型?我會給你一個提示:它是'int',而不是'void'。 – 2010-04-27 04:19:38

回答

3

你需要有資格作爲vectorstd::vector

它在.cpp文件中工作,因爲您使用using namespace std;(在標頭文件中使用而不是使用using namespace)。

此外,您聲明的成員變量不正確。它應該是:

myMatrix sudoku_; 

如果要設置其尺寸,則需要在構造函數中進行設置。

+0

我意識到並添加了它,但仍然有很多錯誤。 – xbonez 2010-04-27 04:19:36

+1

非常感謝。錯誤組合爲: 1.不使用namespace std;我通常補充說,即使對頭文件(這是我的教授教我的,但我聽說它不好,因爲它污染了全局命名空間),但我在這裏使用了std :: vector。 2.在聲明sudoku_時指定尺寸,不在構造函數中; 再次,謝謝一噸。 – xbonez 2010-04-27 04:24:16

1

除了限定名稱空間外,還沒有爲頭文件中的sudoku_提供構造函數參數。您需要定義自己的構造函數電網,並在初始化器列表構造sudoku_:

grid::grid() : sudoku_(9,9) { } 
0

在其聲明中一樣,你不能初始化sudoku_成員對象。該初始化屬於構造函數初始化塊。