C++ 默认复制构造函数不可行
C++ Default Copy Constructor Not Viable
我有 2 个 类、User
和 BBoard
(公告栏)。
我在 BBoard
中有一个成员函数,它检查从文件中读取数据并将其推回向量 userList
。我还有一个检查User
是否存在的成员函数(如果User
存在,我想使用默认的复制构造函数并将其分配给currentUser
)
这些是我在 BBoard 中的私有变量:
// private:
// std::string title;
// std::vector<User> userList;
// User currentUser;
// std::vector<Message> messageList;
这是BBoard
中推回User
s的成员函数:
while (inFS >> dataName && inFS >> dataPass) {
User x(dataName, dataPass);
userList.push_back(x);
}
这是 BBoard
中的成员函数,它检查 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;
}
我得到的错误是:
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 {
我没有在 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
这定义了一个const
class 方法。这就是声明末尾的 const
关键字的含义。 const
class 方法不能修改其 class 的任何成员,它们都有效地 const
方法(除非显式声明 mutable
,这不是这里的情况)。
currentUser = userList.at(i);
这试图修改 class 的成员。由于它实际上是 const
class 成员,因此无法修改。
我有 2 个 类、User
和 BBoard
(公告栏)。
我在 BBoard
中有一个成员函数,它检查从文件中读取数据并将其推回向量 userList
。我还有一个检查User
是否存在的成员函数(如果User
存在,我想使用默认的复制构造函数并将其分配给currentUser
)
这些是我在 BBoard 中的私有变量:
// private:
// std::string title;
// std::vector<User> userList;
// User currentUser;
// std::vector<Message> messageList;
这是BBoard
中推回User
s的成员函数:
while (inFS >> dataName && inFS >> dataPass) {
User x(dataName, dataPass);
userList.push_back(x);
}
这是 BBoard
中的成员函数,它检查 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;
}
我得到的错误是:
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 {
我没有在 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
这定义了一个const
class 方法。这就是声明末尾的 const
关键字的含义。 const
class 方法不能修改其 class 的任何成员,它们都有效地 const
方法(除非显式声明 mutable
,这不是这里的情况)。
currentUser = userList.at(i);
这试图修改 class 的成员。由于它实际上是 const
class 成员,因此无法修改。