尽管我确定这是一个常见问题,但我仍无法在此找到线程。我找到的最接近的是这里,但最终似乎并没有问同样的事情。
我对C ++相当陌生,所以我可能只是在做一些愚蠢的事情。
说我有以下Person类设置(对所有代码都很抱歉。我不确定问题出在哪里-如果可能的话-我包括了所有内容。):
人
#ifndef PERSON_H
#define PERSON_H
#include <string>
using std::string;
class Person {
public:
Person();
Person(string name);
~Person();
string name;
private:
};
#endif
人.cpp
#include "person.h"
Person::Person() {
}
Person::Person(string name) {
this->name = name;
}
Person::~Person() {
}
然后,我想要一个全局函数,该函数将更改name
给定人员的属性:
globals.h
#ifndef GLOBALS_H
#define GLOBALS_H
#include <string>
using std::string;
class Person; // forward declaring
void changeName(Person* person, string name);
#endif
globals.cpp
#include "globals.h"
void changeName(Person* &person, string name) {
person->name = name;
}
当我尝试编译时,出现“不完整的类”和“转发声明”错误(如有必要,我可以提供)。我是在做错什么,还是我必须使用类成员函数(例如Person::changeName(.....)
)来执行此操作?
感谢您的帮助。
您的globals.cpp
文件缺少必要的文件#include "person.h"
。
还有其他一些问题:
void changeName(Person* person, string name);
这可能应该是:
void changeName(Person& person, string name);
除非您希望使用调用该函数nullptr
。
void changeName(Person* &person, string name) { person->name = name; }
应该:
void changeName(Person& person, string name) {
person.name = name;
}
然后是这样的:
Person::Person(string name) { this->name = name; }
您应该改用初始化列表:
Person::Person(string name) : name(name) {}
而且我不知道你是否意识到通过的可能性std::string
通过const&
。它一直是传递字符串的准则,直到C ++ 11出现并就传递大对象的最佳实践进行了持续的讨论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句