【发布时间】:2016-07-05 18:34:40
【问题描述】:
//我的头文件
//Header File
#include<iostream>
using namespace std;
MyFloat rotate_right(MyFloat obj)
{
/*All that this function is supposed to do, is to return a new object, that object will
be having array elements in the order like 2.2 3.2 4.2 5.2 6.2 where the
original(object that is passed in parameter) object must be having array elements
in order like 3.2 4.2 5.2 6.2 2.2
*/
MyFloat c;
c.size = obj.size;
c.arr = nullptr;
c.arr = new float [obj.size];
c.arr[0] = obj.arr[obj.size - 1];
for(int i = 1,j=0; i < (obj.size - 1); i++,j++)
{
c.arr[j] = obj.arr[i];
}
return c;
}
class MyFloat
{
public:
MyFloat();//Default Constructor
MyFloat(int data);//Parameterized Constructor
MyFloat(MyFloat & const obj);//Copy Constructor
void input();//Filling Array
void PrintFloat();//For Displaying Array
MyFloat& operator=(MyFloat & const obj);//Assignment Operator Overloading
friend MyFloat rotate_right(MyFloat obj);/////////////This is the Function which is causing Problem/////////////
~MyFloat();//Destructor
private:
int size;//size of array
float *arr;
};
///////////这是定义所有功能的Cpp文件
#include"My_Floats_Header.h"
MyFloat::MyFloat()
{
cout << "Default Constructor Called!" << endl;
size = 0;
arr = nullptr;
}
MyFloat::MyFloat(int _size)
{
cout << "Parametrized Constructor Called!" << endl;
size = _size;
arr = nullptr;
arr = new float [_size];
}
void MyFloat :: input()
{
for(int i = 0 ; i < size; i++)
{
cout << "Enter an Element = ";
cin >> arr[i];
}
}
MyFloat :: MyFloat(MyFloat & const obj)
{
size = obj.size;
arr = nullptr;
arr = new float [size];
for(int i = 0 ; i < obj.size; i++)
{
arr[i] = obj.arr[i];
}
}
MyFloat & MyFloat :: operator=(MyFloat & const obj)
{
size = obj.size;
arr = nullptr;
arr = new float [size];
for(int i = 0 ; i < obj.size; i++)
{
arr[i] = obj.arr[i];
}
return *this;
}
void MyFloat :: PrintFloat()
{
for(int i = 0 ; i < size; i++)
{
cout << arr[i];
}
cout << endl;
}
MyFloat::~MyFloat()
{
if(arr != nullptr)
{
delete [] arr;
}
size = 0;
}
////cpp文件有mian()
#include"My_Floats_Header.h"
int main()
{
MyFloat *floatNumber = new MyFloat(5);//declaration
floatNumber -> input();//taking input
MyFloat newfloatNumber = *floatNumber;
floatNumber = rotate_right(floatNumber);
cout << "My Float without Rotation: ";
newfloatNumber.PrintFloat();
cout << "My Float after Rotation: ";
floatNumber -> PrintFloat();
system ("pause");
return 0;
}
我遇到的错误:
错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int(在第 4 行)
错误 C2146 语法错误:缺少 ';'在标识符“rotate_right”之前(在第 4 行)
错误 C2143 语法错误:缺少 ';'在“{”之前(第 5 行)
错误 C2447 '{':缺少函数头(旧式正式列表?)(在第 5 行)
错误 C2143 语法错误:缺少 ';'在 '&' 之前(在第 40 行)
错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int(在第 40 行)
错误 C2086 'int MyFloat':重新定义(在第 40 行)
错误 C2761 'MyFloat &MyFloat::operator =(MyFloat &)': 不允许成员函数重新声明(在第 41 行)
错误 C2059 语法错误:'{'(在第 41 行)
错误 C2143 语法错误:缺少 ';'在“{”之前(第 41 行)
错误 C2447 '{':缺少函数头(旧式正式列表?)(在第 41 行)
错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int(在第 4 行)
错误 C2146 语法错误:缺少 ';'在标识符“rotate_right”之前(在第 4 行)
错误 C2143 语法错误:缺少 ';'在“{”之前(第 5 行)
错误 C2447 '{':缺少函数头(旧式正式列表?)(在第 5 行)
错误 C2065 'floatNumber':未声明的标识符(在第 6 行)
错误 C2061 语法错误:标识符“MyFloat”(在第 6 行)
错误 C2065 'floatNumber':未声明的标识符(在第 7 行中)
'->input' 左侧的错误 C2227 必须指向类/结构/联合/泛型类型(在第 7 行)
错误 C2146 语法错误:缺少 ';'在标识符“newfloatNumber”之前(在第 8 行)
错误 C2065 'newfloatNumber':未声明的标识符(在第 8 行)
错误 C2065 'floatNumber':未声明的标识符(在第 8 行中 )
错误 C2065 'floatNumber':未声明的标识符(在第 9 行中)
错误 C2065 'newfloatNumber':未声明的标识符(在第 12 行)
“.PrintFloat”左侧的错误 C2228 必须具有类/结构/联合(在第 12 行中)
错误 C2065 'floatNumber':未声明的标识符(第 15 行)
'->PrintFloat' 左侧的错误 C2227 必须指向类/结构/联合/通用类型(第 15 行)
【问题讨论】:
-
老兄——你至少会为你的头文件添加一个保护吗? Linking h files with ifdef header guards。我还敦促您考虑使用forward declarations 作为您在此处遇到的"chicken/egg" 问题的更强大的解决方案。
标签: visual-c++