簡體   English   中英

無法訪問在類“ 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?

任何幫助將不勝感激。

在不知道什么是CStringArrayEqptListPpiedsOptions情況下沒有太多要說的。 但順便說一句:

如果您使用的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM