c++构造函数不能有返回类型错误提示?解决方法!

 43 class Point
 44 {
 45 public:
 46     Point(int xx, int yy){X = xx; Y = yy;}//构造该函数
 47     Point(Point &p);
 48     int GetX(void){return X;}//取X坐标
 49     int GetY(void){return Y;}//取Y坐标
 50 private:
 51     int X, Y;//点的坐标
 52 }
 53 
 54 Point::Point(Point &p)
 55 {
 56     X = p.X;
 57     Y = p.Y;
 58     cout << "Point拷贝构造函数被调用"<<endl;
 59 
 60 }

提示错误行号:54

编译时一直提示构造函数不能有返回类型?

原来是Point类的定义在52行没有加分号。


修改为以下代码

 

43 class Point
 44 {
 45 public:
 46     Point(int xx, int yy){X = xx; Y = yy;}//构造该函数
 47     Point(Point &p);
 48     int GetX(void){return X;}//取X坐标
 49     int GetY(void){return Y;}//取Y坐标
 50 private:
 51     int X, Y;//点的坐标
 52 };



C++中,构造函数的重复定义通常发生在包含它的头文件(`.h`或`.hpp`)被多个源文件(`.cpp`)包含的情况下。为了避免这种情况,可以采取以下策略: 1. **私有化(Private)声明**:如果构造函数不需要外部直接访问,可以在头文件中将其声明为private,仅让包含它的源文件能看到。这样做就不会引起链接阶段的重复定义错误。 ```cpp class MyClass { public: MyClass(); // 私有声明 private: MyClass(MyClass const&); // 私有复制构造函数,防止外部实例化 ... }; ``` 2. **使用`= default`或`= delete`**:如果构造函数应该由编译器提供默认实现,可以添加`= default`;如果想禁止默认构造函数,可以用`= delete`。 ```cpp class MyClass { public: MyClass() = default; // 默认构造函数 ... }; ``` 3. **`#pragma once` 或 `< guards>`**:在头文件开头加上`#pragma once`(Windows)或`#ifndef/#define/#endif`(跨平台),以防止多次包含。 4. **`std::enable_if`**:对于模板类的构造函数,可以利用SFINAE(Substitution Failure Is Not An Error)机制,在模板定义中处理构造函数。 5. **避免循环依赖**:如果你的类A包含了B,而B又包含了A,这种循环引用可能会导致构造函数的重复定义。尽量保持良好的模块结构。 记住,每次修构造函数的行为(如添加新的参数或返回类型等)时,都应确保所有引用它的代码相应更新。同时,检查编译器生成的警告也很重要,它们经常能提示潜在的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值