我正在尝试为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?
任何帮助将不胜感激。
答案 0 :(得分:-1)
如果不知道CStringArray
或EqptListPpiedsOptions
是什么,就没什么好说的了。但就这一点而言:
如果您使用的是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:
}
虽然在此示例中,默认的复制构造函数也可以正常工作,因此无需指定新的构造函数。