2011-04-29 40 views
3
#include <cstdio> 
#include <cstdlib> 
#include <iostream> 

using namespace std; 

class Student; 
void function_A(Student& s) 

class Student { 
    void function_B() { 
     ::function_A(*this); 
    } 
    int courses; 
}; 

void function_A(Student& s) 
{ // line 18 (where error is occurring) 
    s.courses = 1; 
} 

int main() 
{ 
    Student s; 
    s.function_B(); 
    return 0; 
} 

,我得到的是如下錯誤:試圖定義一個函數,但我得到「變量或字段'function_A」宣告無效」

(第18行)新類型可能不在返回類型中定義。你的問題的

+0

+1。這比看起來更復雜。我編輯標題使其更具描述性。 – 2011-04-29 00:15:39

+1

歡迎來到StackOverflow!偉大的問題,但請不要改變你的代碼,而人們仍然在回答你的問題。 – 2011-04-29 00:18:09

回答

6

部分是你使用的類型Student之前,它是由使其成爲一個參數來定義function_A。爲了使這項工作,你需要

  1. 添加一個向前聲明function_A
  2. 開關function_A採取指針或Student後參考
  3. 移動function_A。所以成員courses之前它的訪問
  4. 添加;class Student定義

結束後,請嘗試以下

class Student; 
void function_A(Student& s); 

class Student { 
    // All of the student code 
}; 

void function_A(Student& s) { 
    s.courses = 1; 
} 
+0

最重要的是,類定義之後需要';'。 – AnT 2011-04-29 00:13:15

+0

@AndreyT沒有注意到。更新了答案。謝謝! – JaredPar 2011-04-29 00:14:05

+0

謝謝!它現在可以工作 – google11video 2011-04-29 00:21:31

2

您可以選擇將申報Student定義這是必要的。

廣場

class Student; 

function_A之前。

+1

前向聲明也是不夠的,因爲Student對象是按值傳遞的,而function_A引用了Student類的成員變量。 – 2011-04-29 00:10:51

相關問題