csg*_*guy 1 c++ copy-constructor
我有 2 个课程,User,和BBoard(公告板)。
我有一个成员函数BBoard,它检查从文件中读取的数据并将其推回向量userList。我还有一个成员函数来检查 a 是否User存在(如果User存在,我想使用默认的复制构造函数并将其分配给currentUser)
这些是我在 BBoard 中的私有变量:
// private:
// std::string title;
// std::vector<User> userList;
// User currentUser;
// std::vector<Message> messageList;
Run Code Online (Sandbox Code Playgroud)
BBoard这是推回s的成员函数User:
while (inFS >> dataName && inFS >> dataPass) {
User x(dataName, dataPass);
userList.push_back(x);
}
Run Code Online (Sandbox Code Playgroud)
BBoard这是检查 a 是否User存在并尝试使用默认复制构造函数将其分配给 的成员函数currentUser。
bool BBoard::userExists(const string& uName, const string& uPass) const {
for (int i = 0; i < userList.size(); ++i) {
if (userList.at(i).getUsername() == uName) {
if (userList.at(i).check(uName, uPass)) {
currentUser = userList.at(i); //<-- HERE
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是这样的:
BBoard.cpp:153:21: error: no viable overloaded '='
currentUser = userList.at(i);
~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~
./User.h:8:7: note: candidate function (the implicit copy assignment operator) not viable:
'this' argument has type 'const User', but method is not marked const
class User {
Run Code Online (Sandbox Code Playgroud)
我没有在 中声明复制构造函数User,因此我希望隐式创建的复制构造函数能够工作。我也没有推回const User。
根据https://en.cppreference.com/w/cpp/language/copy_constructor
隐式复制构造函数具有这种形式:T::T(const T&)所以我不确定我哪里出错了。
我可以提供该程序的任何其他部分。
这与任何复制构造函数无关。
bool BBoard::userExists(const string& uName, const string& uPass) const
Run Code Online (Sandbox Code Playgroud)
这定义了一个const类方法。这就是const声明末尾的尾随关键字的含义。类const方法不能修改其类的任何成员,它们都const对该方法有效(除非显式声明mutable,但这里不是这种情况)。
currentUser = userList.at(i);
Run Code Online (Sandbox Code Playgroud)
这尝试修改类的成员。由于它实际上是const类成员,因此无法修改。
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |