复制构造函数错误c2039

时间:2013-11-26 20:19:03

标签: c++ overloading

hy伙计们!我有一个令我头痛的代码。我想请一些帮助。这是我的.h文件。

#include <iostream>
#include <string>
using namespace std;

namespace UI{
class Comanda
{
private:
    const string _nume;
public:
    Comanda();
    Comanda(const string &nume);

    virtual ~Comanda();
    const string& Nume() const;
    virtual void AsteaptaEnter();
    virtual void Execute();
};
};

和.cpp:

#include <iostream>
#include <string>
#include "Comanda.h"
#include "Exceptii.h"

using namespace std;
using namespace UI;

Comanda::Comanda()
{
    cout << "Comanda()" << endl;
}

Comanda::Comanda(const string &nume)
{
    _nume = nume._nume;
}

编译器向我显示了这个错误:

错误C2039:'_ nume':不是'std :: basic_string&lt; _Elem,_Traits,_Ax&gt;'

的成员

我该怎么办?提前谢谢!

3 个答案:

答案 0 :(得分:1)

您必须在ctor的初始化列表中初始化常量成员,nume._nume也无效。

Comanda::Comanda(const string &nume) : _nume(nume) {}
                                     ^^^^^^^^^^^^^

答案 1 :(得分:0)

你可能意味着

Comanda::Comanda(const string &nume)
{
    _nume = nume;
}

顺便说一句,它不是复制构造函数。

答案 2 :(得分:0)

_nume = nume._nume;这是错误的

它应该是_nume = nume;

正如@Cornstalks正确指出的那样,在任何情况下都无法实现上述赋值,因为_nume是const。