![](/img/trans.png)
[英]'CObject::CObject' : cannot access private member declared in class 'CObject'
[英]Cannot access private member declared in class 'CObject'
我正在嘗試為CStringArray創建一個副本構造函數。 一旦代碼被編譯,Visual Studio就給我這個錯誤:無法訪問在類'CObject'中聲明的私有成員
在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?
任何幫助將不勝感激。
在不知道什么是CStringArray
或EqptListPpiedsOptions
情況下沒有太多要說的。 但順便說一句:
如果您使用的是C ++ 11land或更高版本,則可以使用auto
而不是單調地拼寫類型,因此
list<CStringArray>::const_iterator itr = data.EqptListPpiedsOptions.cbegin();
變成
auto itr = data.EqptListPpiedsOptions.cbegin();
(另請注意,C ++ 11使用cbegin()
和cend()
為const_iterator
秒。
您還可以進一步簡化使用ranged- for
:
for (const auto &itr : data.EqptListPpiedsOptions) {
this->EqptListPpiedsOptions.push_back(itr);
}
這是一個工作示例,該示例顯示副本構造函數可以訪問該類的另一個實例的私有數據成員:
#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();
}
盡管在此示例中,默認的復制構造函數也可以正常工作,所以無需指定新的構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.