C++ h 和 cpp 文件中的指针声明冲突

C++ conflicting pointer declaration in h and cpp file

本文关键字:指针 声明 冲突 文件 cpp C++      更新时间:2023-10-16

所以我需要一个将 Person 指针作为参数的方法。这意味着我必须在我的头文件和 cpp 文件中声明它。它看起来像这样。

人注册

#pragma once
class PersonReg
{
public:
    PersonReg(int const maxSize);
    void addPerson(Person* personPtr);
    ~PersonReg();
};

人注册.cpp

PersonReg::PersonReg(int mSize)
{
    maxSize = mSize;
}
void add(Person* personPtr) {
    //Do stuff
}
PersonReg::~PersonReg()
{
}

问题是Visual Studio抱怨addPerson的函数定义缺失,并给出了实现它的建议。如果我这样做,它看起来像这样:

void PersonReg::addPerson(Person * personPtr)
{
}

现在这里发生了什么?为什么找不到我的实现? 星号周围的空格是什么意思?有什么区别?

void PersonReg::addPerson(Person* personPtr) {
    //Do stuff
}

是你需要的。您错过了说出函数的正确名称和命名空间的位。

我也不认为星号周围的空间很重要。有些人省略了类型旁边的空格,有些人省略了名称旁边的空格。

基本上,当你创建函数时void add(Person* personPtr) {你已经定义了一个不在类内的函数,它与它没有任何联系。另一方面,当您使用范围解析运算符时::您已经重载了一个在类中具有原型的函数。

简单来说,执行void PersonReg::addPerson(Person * personPtr) 是指类中的函数。

如果你正在做void add(Person* personPtr) {你正在定义另一个不属于类的函数。

希望这有帮助。