我正在尝试从classB访问classC的成员,classC和classB都在classA中。这是我正在尝试做的事情;
//hello.h
class hello{
public:
hello();
class letters{
public:
letters();
void setName(char n);
char getName();
private:
char name;
}
class sayHi{
public:
sayHi();
void onJoin();
}
}
//hello.cpp
hello::hello(){}
hello::letters(){}
hello::sayHi(){}
void hello::letters::setName(char n){
hello::letters::name = n; //trying to access the private variable 'name' inside class letters
}
char hello::letters::getName(){
return hello::letters::name = n;
}
void hello::sayHi::onJoin(){
cout<< hello::letters::getName() <<endl;
}
我知道我做错了,我应该创建每个类的实例并调用成员吗?
答案 0 :(得分:2)
是的,你应该创建这些类的实例 这些通常被称为“对象”,这就是为什么他们称之为“面向对象的编程”。
首先,您的getName
和setName
应如下所示:
void hello::letters::setName(char n) {
name = n;
}
char hello::letters::getName() const { // Declaration should also say "const".
return name;
}
完成此操作后,任何sayHi
实例都需要知道哪个letters
要“嗨”,这意味着您需要告诉它。
这通常通过将参数传递给需要知道的方法来完成:
class sayHi{
public:
sayHi();
void onJoin(const letters& who)
{
cout << who.getName() << endl;
}
};
你可以使用这样的:
int main()
{
hello::letters letter;
letter.setName('p');
hello::sayHi greeter;
greeter.onJoin(letter);
}
答案 1 :(得分:0)
你得到的错误是什么?你在哪里创建了访问这些方法的对象?还
return hello::letters::name = n;
这一行是错的,应该是
return hello::letters::name;