试图定义一个函数,但我得到“变量或字段`function_A'声明为void”

时间:2011-04-29 00:06:07

标签: c++

#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;
}

我得到的错误如下:

  

(第18行)可能无法在返回类型中定义新类型。

2 个答案:

答案 0 :(得分:6)

问题的一部分是你在定义之前使用类型Student,使其成为function_A的参数。为了完成这项工作,你需要

  1. 添加转发声明function_A
  2. 切换function_A以获取指针或参考
  3. function_A之后移动Student。这是必要的,因此成员courses在被访问之前就已定义
  4. ;定义
  5. 结束后添加class Student

    尝试以下

    class Student;
    void function_A(Student& s);
    
    class Student { 
       // All of the student code
    };
    
    void function_A(Student& s) {
      s.courses = 1;
    }
    

答案 1 :(得分:2)

您必须转发声明Student

放置

 class Student;
function_A之前