2016-03-18 4 views
0

//My Header Fileは27のエラー

//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; 

}; 

////////////This is the Cpp FILE Having Definition of All Functions

#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 file having 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; 
} 

ERRORS THAT I'm GETTING:

エラーC4430欠落している型指定子を与えます。注:C++はdefault-intをサポートしていません(行番号4)

エラーC2146構文エラー: ';'がありません。 「行番号4」の識別子 'rotate_right'の前に

エラーC2143構文エラー: ';'が見つかりません。 ';':逃す機能ヘッダ(?古いスタイルの正式なリスト)(行番号5で)

エラーC2143構文エラー: '{'(行番号5で)

エラーC2447 '{' の前に'&'の前(行番号40)

エラーC4430欠落型指定子 - が想定されています。注:C++は(行番号40に)C2086 'intはMyFloat'

エラーをデフォルト-int型をサポートしていません(行番号40)で再定義

エラーC2761「MyFloat & MyFloat ::演算子=(MyFloat & '):(行番号41に許可されていないメンバ関数再宣言)

エラーC2059構文エラー: '{'()行番号41に

エラーC2143構文エラー:不足しています ';' '{' の前に(行番号41)で

エラーC2447 '{':欠落している関数ヘッダ(旧スタイルの正式なリスト?)(行番号41)で

エラーC4430欠落している型指定 - 仮定intです。注:C++はdefault-intをサポートしていません(行番号4)

エラーC2146構文エラー: ';'がありません。 「行番号4」の識別子 'rotate_right'の前に

エラーC2143構文エラー: ';'が見つかりません。 '{'(行番号5)の前に '012')(行番号5)で

エラーC2065 'floatNumber':宣言されていない識別子(行番号6)

エラーC2061構文エラーで:識別子 'MyFloat'(行番号6)

エラーC2065 「floatNumber」:

エラーC2227は、の左(行番号7で)宣言されていない識別子 -

エラーC2146構文エラー(行番号7で)/構造体/共用/ジェネリック型クラスを指している必要があります「>入力」 :欠落した ';' (行番号8)識別子 'newfloatNumber' 前

エラーC2065 'newfloatNumber':宣言されていない識別子(行番号8)

エラーC2065 'floatNumber':宣言されていない識別子(行番号8 )

エラーC2065 'floatNumber':(行番号9)で宣言されていない識別子

エラーC2065 'newfloatNumber':(行番号12)で宣言されていない識別子C2228は.Pr「の左

エラーintFloatは」(行番号12の)クラス/構造体/共用体を持っている必要があります

エラーC2065 'floatNumber':C2227は、の左に宣言されていない識別子(行番号15)

エラー ' - > PrintFloat' が/クラスを指している必要があります構造体/共用体/ジェネリック型(行番号15)

+0

Dude - 少なくともあなたのヘッダーファイルにガードを追加しますか? [ifdefヘッダーガードとhファイルをリンクする](http://stackoverflow.com/questions/14290026)。私は[チキン/卵](http://www.gamedev。)のより堅牢な解決策として[forward declarations](https://en.wikipedia.org/wiki/Forward_declaration)の使用を検討するよう強くお勧めします。 net/topic/643989-avoiding-the-c-chicken-or-egg-problem /)問題が発生しました。 – paulsm4

答えて

-1

ヘッダーファイルで、クラス定義をrotate_right()の定義の上に移動します。これにより、作業コードに近づけることができます。注文事項

+0

オプション1:「クラスMyFloat」の上に「rotate_right()」を移動します(あなたの提案のように)。これは、少なくともいくつかのコンパイルエラーを修正します。オプション2:[前方宣言](https://en.wikipedia.org/wiki/Forward_declaration)を追加する - より効果的です。オプション3)任意/すべてのスタンドアロン機能を* SEPARATE .CPP FILES * - BESTに移動します。スタンドアロン機能は一般的にヘッダーに属しません。特に[ヘッダーガード](https://en.wikipedia.org/wiki/Include_guard)なしで! – paulsm4

1

MyFloat rotate_right()は、おそらくヘッダーファイルには入れないでください。あなたがそれを取り除くならば、あなたはあなたのエラーの(ほとんどすべて?)解決すべきです。

私のお勧めは、static methodのMyFloatにすることです。

代替方法として、rotate_right()をスタンドアロン機能としてそのまま使用し、.cppファイルの先頭には単に#include "MyFloat.hを付けることができます。

関連する問題