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

时间:2017-11-08 07:26:20

标签: c++ pointers

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

PersonReg.h

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

PersonReg.cpp

PersonReg::PersonReg(int mSize)
{
    maxSize = mSize;
}

void add(Person* personPtr) {
    //Do stuff
}

PersonReg::~PersonReg()
{
}

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

我也不认为星号周围的空间很重要。有些人会忽略该类型旁边的空间,有些人会在名称旁边留下空间。

答案 1 :(得分:1)

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

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

如果您正在进行void add(Person* personPtr) {,那么您正在定义另一个不属于该类的函数。

希望这有帮助。