//我的标题文件
//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语法错误:缺少';'在'&amp;'之前(第40行)
错误C4430缺少类型说明符 - 假设为int。注意:C ++不支持default-int(行号40)
错误C2086'int MyFloat':重新定义(第40行)
错误C2761'MyFloat&amp; MyFloat :: operator =(MyFloat&amp;)':不允许成员函数重新声明(第41行)
错误C2059语法错误:'{'(第41行)
错误C2143语法错误:缺少';'在'{'之前(第41行)
错误C2447'{':缺少函数头(旧式正式列表?)(第41行)
错误C4430缺少类型说明符 - 假设为int。注意:C ++不支持default-int(第4行)
错误C2146语法错误:缺少';'在标识符'rotate_right'之前(第4行)
错误C2143语法错误:缺少';'在'{'之前(第5行)
错误C2447'{':缺少函数头(旧式正式列表?)(第5行)
错误C2065'floraNumber':未声明的标识符(在第6行中)
错误C2061语法错误:标识符'MyFloat'(第6行)
错误C2065'floraNumber':未声明的标识符(第7行)
' - >输入'左侧的错误C2227必须指向类/ struct / union / generic类型(第7行)
错误C2146语法错误:缺少';'在标识符'newfloatNumber'之前(第8行)
错误C2065'newfloatNumber':未声明的标识符(第8行)
错误C2065'floraNumber':未声明的标识符(行号8) )
错误C2065'floraNumber':未声明的标识符(第9行)
错误C2065'newfloatNumber':未声明的标识符(第12行)
'.PrintFloat'左侧的错误C2228必须有class / struct / union(行号12)
错误C2065'floraNumber':未声明的标识符(第15行)
' - &gt; PrintFloat'左侧的错误C2227必须指向类/ struct / union / generic类型(行号15)
答案 0 :(得分:1)
MyFloat rotate_right()
可能不应该在头文件中。如果你把它拿出来,你应该解决(大部分?全部?)你的错误。
我的建议是将其作为MyFloat的static method。
作为替代方案,您可以将rotate_right()
保留为独立函数,只需将#include "MyFloat.h
保存在.cpp文件的顶部。
答案 1 :(得分:-1)
在头文件中,将类定义移到rotate_right()的定义之上。这将使您更接近工作代码。订单很重要。