无法访问在课程中声明的私人成员' CObject'

时间:2016-12-06 00:25:14

标签: c++ visual-c++ mfc

我正在尝试为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?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

如果不知道CStringArrayEqptListPpiedsOptions是什么,就没什么好说的了。但就这一点而言:

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

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

变为

auto itr = data.EqptListPpiedsOptions.cbegin();

(请注意,在C ++ 11中,cbegin()使用cend()const_iterator使用for

您可以使用ranged进一步简化 - 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();
}

这是一个工作示例,显示复制构造函数可以访问该类的另一个实例的私有数据成员:

   String password = new String(oldPass.getPassword());
    String realpass = pw.getText();
    String us = userr.getText();
      user = us;

        System.out.println("ok");
        String query = "DELETE FROM user WHERE privilege = 'NOT ADMIN' +        username = '"+us+"'";
      try {
            Statement st = (Statement) con.createStatement();
            int r = st.executeUpdate(query);
            if (r != 0) {
                JOptionPane.showMessageDialog(null, "Successfully deleted!", "Delete", JOptionPane.OK_OPTION);

                login w = new login();
                w.setVisible(true);
                this.dispose();
            } else {
                JOptionPane.showMessageDialog(null, "Wait! something's wrong, please try again later.", "Ooopppss!", JOptionPane.OK_OPTION);


            }

        } catch (Exception e) {
            System.out.println(e);
        }


      // TODO add        // TODO add your handling code here:
}                              

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