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

declaration is incompatible with (method) - pointers

本文关键字:指针 不兼容 方法 声明      更新时间:2023-10-16

我最近开始玩c++,但我不明白这意味着什么:

我得到这个错误:

声明与"void student_system::addStudent(<error-type> z)"(在第31行声明)不兼容

removeStudent和editStudent 也是如此

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

我还尝试添加指针而不是变量,但这也不起作用(我所说的指针是指"student")。

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

将此代码位放入

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

之后

#include <vector>

使CCD_ 2及其定义知道它的

student_system类定义之上添加class student;

编辑

使用正向声明,我们只能声明方法,其中我们可以使用不完整类型,而不是定义。所以,我的第一个答案是错误的,但下面的代码会起作用。

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)
{
}

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

2) 请不要发布依赖于未提供的include或隐式"using"语句或类似的代码

3) "student"应在student_system之前声明。事实上,您没有得到更多的错误,这让我感到惊讶,但也许您正在做一些在数据库中看不到的事情。h