-2

我已经声明了下面的一个类是头文件:

class Complex
{
private:
    int real;
    int imaginary;

public:

    Complex(); // no arg contructor
    Complex(int,int); // 2 - args constructor
    Complex(const Complex& temp);  // copy constructor
};

不,我正在尝试再次声明复制构造函数,我知道它可以工作,但希望拥有更多功能,但是当我将其代码包含在实现文件中时它不起作用。这是来自实现文件的代码。

Compelx::Complex(const Complex& temp) // copy constructor 
{
    real = 2*temp.real;
    imaginary =2*temp.imaginary;
}

main()我有以下代码

Complex a,b;

a.setReal(10);
cout<<a.getReal()<<endl;

b=a; // problem is here, copy constructor(that is redefined one) is not being executed.

b.print();

复制构造函数没有执行,而是我收到以下错误:

1> Complex.cpp 1>Complex.cpp(21):错误 C2653:“Compelx”:不是类或命名空间名称 1>Complex.cpp(21):错误 C2226:语法错误:意外类型“复杂”1> Complex.cpp(22):错误 C2143:语法错误:缺少 ';' '{' 之前 1>Complex.cpp(22): 错误 C2447: '{' : 缺少函数头(旧式正式列表?) 1> main.cpp 1> 生成代码... ======= === 构建:0 成功,1 失败,0 最新,0 跳过 ==========

4

4 回答 4

3

好像是拼写错误,换一个试试

Compelx::Complex(const Complex& temp) // copy constructor 

Complex::Complex(const Complex& temp) // copy constructor 
于 2013-10-24T12:46:18.220 回答
3

您使用的是复制赋值运算符,而不是复制构造函数。复制构造函数调用如下所示:

Complex b(a);

你打电话的有签名:

Complex& operator=(const Complex& rhs);
于 2013-10-24T12:46:48.960 回答
2
Compelx


Complex

看到不同。

于 2013-10-24T12:46:26.033 回答
2

此语句是一个赋值,您没有提供复制赋值运算符的实现:Complex& operator=(const Complex&)。使用copy&swap 习惯用法,您可以重用您的复制构造函数来实现该运算符。

于 2013-10-24T12:46:31.230 回答