C++定义了一个类,为什么会报错。

蓝兔先生 2014-03-01 03:46:53
// 头文件部分

#include <iostream>

using namespace std;

class Test
{
public:
void func()
{

}

private:
Test ();

Test (const Test&);

Test& operator= (const Test&);

~Test ();
};



// 源文件部分

#include "head.h"

Test :: Test()
{

}

Test :: Test(const Test&)
{

}

Test :: Test& operator= (const Test&)
{
}




int main()
{
return 0;
}


关于最后的
Test :: Test& operator= (const Test&)
{}

这个报错了。

报错信息如下:
error c2143:语法错误:缺少";"(在 "&" 的前面)

error C2761:"{ctor}":不允许成员函数重新声明

error C4430:缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

error C2801:"operator" 必须是非静态成员

IntelliSense:重载函数"Test::Test"不是类型名

IntelliSense:"operator="必须是成员函数
...全文
556 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝兔先生 2014-03-03
  • 打赏
  • 举报
回复
引用 12 楼 derekrose 的回复:

class A{
void fun(); // fun是成员函数,void返回值,void参数
};

void A::fun() //A::fun A应该修饰fun 而不是修饰返回值
{
...
}
正解, 我自己搞混淆了
derekrose 2014-03-03
  • 打赏
  • 举报
回复

class A{
void fun(); // fun是成员函数,void返回值,void参数
};

void A::fun() //A::fun A应该修饰fun 而不是修饰返回值
{
...
}
waterSStreaming 2014-03-03
  • 打赏
  • 举报
回复
定义格式

Test& Test::operator= (const Test&)
{
}
你把构造函数和重载赋值操作符函数都写成私有的,那每个传进去的该类型的参数,在运行到函数里面是都要创建一个副本,你用引用&就可以避免创建副本了,但是你如果返回该类型的结果,如果你返回的不是传进去的这个实例,就不可避免要调用构造函数新建一个实例并且返回,这时候你把构造函数设为私有,无法调用并实例化
Johnblx 2014-03-03
  • 打赏
  • 举报
回复
吧构造函数设为private,一般是这个类作为单例模式处理 还有将构造函数设置为private,那么他就不会有子类了。 在构造函数设置为private后,析构函数设置为private或public 个人感觉意义不大
引用 4 楼 Adol1111 的回复:
错误楼上都说了,不过我还是想知道,把构造函数和析构函数设置为private的意思是?
漫步者、 2014-03-03
  • 打赏
  • 举报
回复
引用 7 楼 u013685578 的回复:
[quote=引用 2 楼 ganpengjin1 的回复:] Test :: Test& operator= (const Test&) = Test& Test :: operator= (const Test&)
斑猪, 我不太明白为什么定义格式是那样的 [/quote] 你看看类方法如何定义与实现
蓝兔先生 2014-03-03
  • 打赏
  • 举报
回复
引用 4 楼 Adol1111 的回复:
错误楼上都说了,不过我还是想知道,把构造函数和析构函数设置为private的意思是?
刻意屏蔽掉编译器自动生成的三个函数。
蓝兔先生 2014-03-03
  • 打赏
  • 举报
回复
引用 2 楼 ganpengjin1 的回复:
Test :: Test& operator= (const Test&) = Test& Test :: operator= (const Test&)
斑猪, 我不太明白为什么定义格式是那样的
mujiok2003 2014-03-02
  • 打赏
  • 举报
回复
函数返回值 函数名(参数表)
{
函数体
}
badlyForPapers 2014-03-02
  • 打赏
  • 举报
回复
为什么要这样定义类啊?感觉有点麻烦,是因为常量的限制吗?
Adol1111 2014-03-01
  • 打赏
  • 举报
回复
错误楼上都说了,不过我还是想知道,把构造函数和析构函数设置为private的意思是?
Binzo 2014-03-01
  • 打赏
  • 举报
回复
Test& Test ::operator= (const Test&)
{
    //do something
    return xxx;
}
漫步者、 2014-03-01
  • 打赏
  • 举报
回复
Test :: Test& operator= (const Test&) = Test& Test :: operator= (const Test&)
JianDom 2014-03-01
  • 打赏
  • 举报
回复
Test :: Test& operator= (const Test&) -> Test& Test::operator= (const Test&)

64,283

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧