2015-11-13 154 views
0

我有這樣的代碼:聲明函數的對象參數

#ifndef AI_H 
#define AI_H 

void BuildTree(Board b); 
int getMove(); 
void acceptMove(int); 


#endif 

和cpp文件:

#include "AI.h" 
#include "Board.h" 

void BuildTree(Board b) 
{ 

} 

int getMove() 
{ 

    return 0; 
} 
void acceptMove(int) 
{ 

} 

我正因爲在頭文件中paramater Board b的錯誤。 錯誤是:

Error 1 error C2065: 'Board' : undeclared identifier

爲什麼它不接受一個對象??我希望函數通過值來接收一個對象,而不是引用。

+0

如果你想按值傳遞,你需要它列入頭。 –

+0

前向聲明也適用於聲明一個按值賦值的函數。你不需要完全定義的類型。 – Kevin

回答

1

編譯器抱怨板:它不知道它是什麼。您必須定義(不僅僅是聲明)它能夠使用該類型的對象(例如,將其作爲參數)。

您可以通過#include解決您的問題,荷蘭國際集團確定Board頭文件:

#include "Board.h" 
+0

我明白了,我必須將它包含在頭文件和cpp文件中。另一件事情是,收到的參數將是一個正確的複製?即使電路板上有二維數組? –

+1

@AmmarSamater你只需要在頭文件中包含它。 –

+1

@AmmarSamater你應該只將它包含在AI.h中,因爲你包含來自AI.cpp的AI.h;)是的,這是正確的:'BuildTree'將收到'Board'的副本。如果你確實需要一份很棒的副本。如果你只需要閱讀一個Board,'BuildTree'應該得到'const Board&'參數。最後,如果你需要閱讀和寫入董事會對象,它應該採取'董事會和'參考。希望能幫助到你。 – YSC

2

就包括Board.hai.h

#ifndef AI_H 
#define AI_H 

#include "Board.h" 

void BuildTree(Board b); 
int getMove(); 
void acceptMove(int); 

#endif 
1

包括在你的第一個文件Board.hAI.h