2015-11-15 86 views
2

這是我的頭文件。我試圖編譯這個,但我得到了一個錯誤在void init(TipMatrice tip)「初始化'void graf_matrice :: init(graf_matrice :: TipMatrice)'''的參數1,它將我重定向到另一個轉換錯誤。我認爲它的錯誤與我的枚舉。int C++類的轉換無效

#ifndef GRAF_MATRICE_H 
#define GRAF_MATRICE_H 

class graf_matrice 
{ 
public: 
static const int MaxN = 50; // numarul maxim de noduri 
static const int Infinit = 99999; // nu exista drum intre noduri 
enum TipMatrice 
{ 
MatriceAdiacenta = 1, 
MatriceCosturi = 2 
    }; 
public: 
graf_matrice(); 
void init(TipMatrice tip); //iniţializare graf 


}; 
#endif // GRAF_MATRICE_H 

這是我的主要。我在g.init(1)「int無效轉換爲graf_matrice :: TipMatrice」時出錯。

#include <iostream> 
#include"graf_matrice.h" 

using namespace std; 

int main() 
{ 

    graf_matrice g; 
    g.init(1); 

    return 0; 
} 

你能幫我這個因爲我不知道什麼是錯的。對不起,語言差的初學者。在未範圍enum(這裏TipMatrice)普查員(這裏MatriceAdiacenta)定義爲:

+1

爲什麼不'g.init(graf_matrice :: MatriceAdiacenta);'?否則'TipMatrice'枚舉的目的不明確 –

+0

是的。它的工作。非常感謝你..我永遠不會想到這件事..這很容易 –

+0

你可以使'MaxN'和'Inf​​init'成爲'enum'值而不是靜態const intts –

回答

0

當你定義一個枚舉,你最好使用正確的價值觀:

g.init(graf_matrice::MatriceAdiacenta); 

說明在包含enum(這裏是類graf_matrice)的範圍內。這就是爲什麼你必須表明與::

範圍或者,如果你真的需要從int轉換,你仍然可以做到這一點明確:

g.init(static_cast<graf_matrice::TipMatrice>(1)); 
+0

非常感謝你。它的工作現在 –