c ++ - 声明与(方法) - 指针不兼容

时间:2016-01-01 08:53:22

标签: c++ variables pointers

我最近开始使用c ++,但因为我不明白这意味着什么:

我收到此错误:

  

声明与“void student_system::addStudent(<error-type> z)”(在第31行声明)

不兼容

同样适用于removeStudent和editStudent

我从另一个stackoverflow帖子复制了“function()”,这看起来很好并添加了标题没有问题,但我自己的“学生”方法似乎不起作用,我不明白为什么,

我也尝试添加指针而不是变量,但这也不起作用(并且通过指针我的意思是“student * x”)。

#include "database.h"
#include <vector>

int main()
{
    return 0;
}

class student_system
{   
private: 
    list<student> studList;

public:
    student_system();
    void addStudent(student x);
    void removeStudent(student y);
    void editStudent(student z);
    void findPos();
    void function(int a, int b, vector<int> *p);
};

student_system::student_system()
{
    //constructor
}

void student_system::addStudent(student x)               // <------------- LINE 31 
{
    studList.push_back(x);
}
void student_system::removeStudent(student y)
{
    /*studList.rem*/
}

void student_system::editStudent(student z)
{
    /*get{ return value; }
        set{  }*/

}

void student_system::findPos()
{

}

void student_system::function(int a, int b, vector<int> *p)
{

}



class student
{
private:
    string name, surname, ID;
    int sid;
public : 
    student::student(int sid, string n, string s, string id);
};

student::student(int sid, string n, string s, string id)
{
    (*this).sid = sid;
    (*this).name = n;
    (*this).surname = s;
    (*this).ID = id;    
}

3 个答案:

答案 0 :(得分:1)

1)请在发布前将问题简化为最基本的元素。

2)请不要发布依赖于未提供的包含或隐含的“使用”声明等的代码

3)“student”应在student_system之前声明。你没有得到更多错误的事实让我感到惊讶,但也许你正在做一些在database.h中看不到的事情。

答案 1 :(得分:1)

把这段代码

class student
{
private:
    string name, surname, ID;
    int sid;
public : 
    student::student(int sid, string n, string s, string id);
};

之后
#include <vector>

这样student_system及其定义就知道了

答案 2 :(得分:1)

class student;添加到student_system类定义之上。

修改

使用前向声明我们只能声明方法,在这些方法中我们可以使用不完整的类型而不是 define 。所以,我的第一个答案是错误的,但以下代码将起作用。

int main()
{
    return 0;
}

// Forward Declaration
class student;

// ================================
//      Class student_system
// ================================
class student_system
{
private:
    list<student> studList;

public:
    student_system();
    void addStudent(student x);
    void removeStudent(student y);
    void editStudent(student z);
    void findPos();
    void function(int a, int b, vector<int> *p);
};


// ================================
//          Class student
// ================================
class student
{
private:
    string name, surname, ID;
    int sid;
public :
    student(int sid, string n, string s, string id);
};

// ================================
//     Definition of methods
// ================================

student::student(int sid, string n, string s, string id)
{
    (*this).sid = sid;
    (*this).name = n;
    (*this).surname = s;
    (*this).ID = id;
}

student_system::student_system()
{
    //constructor
}

void student_system::addStudent(student x)
{
    studList.push_back(x);
}
void student_system::removeStudent(student y)
{
    /*studList.rem*/
}

void student_system::editStudent(student z)
{
    /*get{ return value; }
        set{  }*/

}

void student_system::findPos()
{

}

void student_system::function(int a, int b, vector<int> *p)
{

}