cpp: 无法使用 -> 通过指针获取成员的值
cpp: can't get the value of member via pointer by using ->
我有一个关于如何在 cpp 中使用 -> 的问题。我需要做的是使用在 class 中创建的指针 a 获取 class B 的私有成员值 code ] C,我的代码有这样的结构:
我把原来的代码贴在这里:
//detector.hpp
class Detector{
public:
std::string name;
int code;
}
//detectorH.hpp
class detectorH : public Detector {
private:
std::string name;
int code;
public:
detectorH();
std::shared_ptr<Detector> h_detector();
}
//detectorH.cpp
detectorH::detectorH(){
name = "h";
code = 1111;
}
std::shared_ptr<Detector> h_detector(){
return std::make_shared<detectorH>();
}
//findCode.cpp
class findCode{
private:
std::vector<std::shared_ptr<Detector>> detectors;
public:
findCode(){
detectors.push_back(h_detector());
void find(){
for(auto& d:detectors){
std::cout << d->code << std::endl;
}
}
}
};
但问题是 cout 始终为 0,这意味着我未能获得正确的值。我不知道为什么……而且没有错误消息,所以我不知道该如何解决……任何人都可以给我提示吗?非常感谢!
正如评论者所说 - A
中的 code
与 B
中的 code
无关。此外,当您通过指向 A
的指针访问 code
时,您将访问 A::code
。因为我们真的不知道你想要实现什么,你可以从 B
:
中删除 code
class A {
public:
int code;
};
class B : public A {
public:
B() { code = 1111 };
};
或将其初始化为某个值:
class A {
public:
A() : code{ 2222 } { }
int code;
};
class B : public A {
public:
B() : code{ 1111 } { }
private:
int code;
};
您也可以在 B
的构造函数中执行此操作:
class B : public A {
public:
B() : code{ 1111 } { A::code = 2222; }
private:
int code;
};
我有一个关于如何在 cpp 中使用 -> 的问题。我需要做的是使用在 class 中创建的指针 a 获取 class B 的私有成员值 code ] C,我的代码有这样的结构: 我把原来的代码贴在这里:
//detector.hpp
class Detector{
public:
std::string name;
int code;
}
//detectorH.hpp
class detectorH : public Detector {
private:
std::string name;
int code;
public:
detectorH();
std::shared_ptr<Detector> h_detector();
}
//detectorH.cpp
detectorH::detectorH(){
name = "h";
code = 1111;
}
std::shared_ptr<Detector> h_detector(){
return std::make_shared<detectorH>();
}
//findCode.cpp
class findCode{
private:
std::vector<std::shared_ptr<Detector>> detectors;
public:
findCode(){
detectors.push_back(h_detector());
void find(){
for(auto& d:detectors){
std::cout << d->code << std::endl;
}
}
}
};
但问题是 cout 始终为 0,这意味着我未能获得正确的值。我不知道为什么……而且没有错误消息,所以我不知道该如何解决……任何人都可以给我提示吗?非常感谢!
正如评论者所说 - A
中的 code
与 B
中的 code
无关。此外,当您通过指向 A
的指针访问 code
时,您将访问 A::code
。因为我们真的不知道你想要实现什么,你可以从 B
:
code
class A {
public:
int code;
};
class B : public A {
public:
B() { code = 1111 };
};
或将其初始化为某个值:
class A {
public:
A() : code{ 2222 } { }
int code;
};
class B : public A {
public:
B() : code{ 1111 } { }
private:
int code;
};
您也可以在 B
的构造函数中执行此操作:
class B : public A {
public:
B() : code{ 1111 } { A::code = 2222; }
private:
int code;
};