gpt4 book ai didi

c++ - 无法访问在类 'CObject' 中声明的私有(private)成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:54 25 4
gpt4 key购买 nike

我正在尝试为 CStringArray 创建一个复制构造函数。编译代码后,Visual Studio 给了我这个错误:无法访问在类“CObject”中声明的私有(private)成员

在 example.h 我已经声明了变量:

list<CStringArray>EqptListPpiedsOptions;

在 example.cpp

我用它作为我的复制构造函数:
example::example(const example &data) {
list<CStringArray>::const_iterator itr = data.EqptListPpiedsOptions.begin();

while (itr != data.EqptListPpiedsOptions.end()) {
this->EqptListPpiedsOptions.push_back(*itr);
itr++;
}
}

如何正确使用复制构造函数 CStringArray List ?

任何帮助将不胜感激。

最佳答案

不知道什么没啥可说的CStringArrayEqptListPpiedsOptions是。但顺便说一句:

如果您使用 C++11 或更高版本,则可以使用 auto而不是繁琐地拼出类型,所以

list<CStringArray>::const_iterator itr = data.EqptListPpiedsOptions.cbegin();

变成
auto itr = data.EqptListPpiedsOptions.cbegin();

(另请注意,在 C++11 中,您使用 cbegin()cend() 来表示 const_iterator s。

您可以使用 ranged- for 进一步简化:
for (const auto &itr : data.EqptListPpiedsOptions) {
this->EqptListPpiedsOptions.push_back(itr);
}

这是一个工作示例,显示复制构造函数可以访问该类的另一个实例的私有(private)数据成员:
#include <initializer_list>
#include <iostream>
#include <list>

class Example {
public:
Example() = default;
Example(std::initializer_list<int> li) : li_(li) {}
Example(const Example &data);
void print() {
for (const auto i : li_) {
std::cout << i << ", ";
}
}

private:
std::list<int> li_;
};

Example::Example(const Example &data) {
for (const auto &i : data.li_) {
this->li_.push_back(i);
}
}

int main() {
Example foo{5, 4, 3, 2, 1};
Example bar;
bar = foo; // call copy constructor and move foo.li_ to bar.li_
bar.print();
}

尽管在本例中,默认的复制构造函数也可以正常工作,因此无需指定新的构造函数。

关于c++ - 无法访问在类 'CObject' 中声明的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com