相关疑难解决方法(0)

在具有参考字段的类上放置新的

这是来自 C++20 规范 ( [basic.life]/8 )的代码示例:

struct C {
  int i;
  void f();
  const C& operator=( const C& );
};

const C& C::operator=( const C& other) {
  if ( this != &other ) {
    this->~C();              // lifetime of *this ends
    new (this) C(other);     // new object of type C created
    f();                     // well-defined
  }
  return *this;
}

int main() {    
  C c1;
  C c2;
  c1 = c2;   // well-defined
  c1.f();    // well-defined; c1 refers to a new object of type …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++20 stdlaunder

11
推荐指数
2
解决办法
329
查看次数

重载赋值运算符会导致有关递归的警告

我需要在类中实现重载赋值运算符,这样vector.erase函数将按照" vector :: erase with pointer member " 的答案中的建议正常工作.为了同样的目的,我也实现了一个复制构造函数.通过以下操作符的实现,我得到警告:

'Player :: operator =':在所有控制路径上递归,函数将导致运行时堆栈溢出.

显然执行Player::operator=是不正确的.什么是正确的实施?

//Copy constructor:
Player::Player(const Player& otherPlayer) {
   ...
}


Player& Player::operator=(const Player& rhs) {
    *this = Player(rhs);
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

多图的擦除功能是否与向量的工作方式相同?当我在multimap中使用时,我没有收到关于没有实现重载的错误,operator=就像vector一样.真相是什么?

此外,玩家还可以引用银行作为会员.我应该只通过=来分配参考吗?那么复制构造函数的目的是什么?

c++ operator-overloading multimap erase

2
推荐指数
1
解决办法
1434
查看次数

C++ 运算符 = 隐式删除

我正在尝试在我的环境游戏中创建我的类 Wanderer 的流浪者属性。

\n

我在环境游戏 hpp 文件中声明它:

\n

Wanderer gaspard;

\n

然后我在 GameEnvironment cpp 文件中初始化它:

\n
void GameEnvironment::initWanderer()\n{\n    this->gaspard = Wanderer(this->_magic, this->_sphere, this->_textureProgram);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我有这个错误:\nin gameEnvironment

\n
\n

使用已删除函数 \xe2\x80\x98Wanderer& Wanderer::operator=(Wanderer&&)\xe2\x80\x99GCC\nWanderer.hpp(12, 7): \xe2\x80\x98Wanderer& Wanderer::operator=(Wanderer&&)\xe2 \x80\x99 被隐式删除>因为默认定义格式不正确:

\n
\n

在流浪者

\n
\n

使用已删除函数 \xe2\x80\x98Object& Object::operator=(Object&&)\xe2\x80\x99GCC\nObject.hpp(13, 7): \xe2\x80\x98Object& Object::operator=(Object&&)\xe2 \x80\x99 被隐式删除,因为 >default 定义格式不正确:

\n
\n

在对象中

\n
\n

非静态引用成员\xe2\x80\x98ObjectProgram& Object::_program\xe2\x80\x99,可以\xe2\x80\x99t使用默认>赋值运算符GCC

\n
\n

如果我声明std::vector<Wanderer> gaspard;\n然后我在我的初始化函数中推回一个流浪者\n this->gaspard = Wanderer(this->_magic, this->_sphere, this->_textureProgram);\n它可以工作。但我只需要一个流浪者,所以拥有向量并不是一个很好的选择。

\n

这是 Wanderer 类:

\n
class Wanderer : public Object …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
105
查看次数