2009-04-21 9 views
1

私は自分のヘッダファイルを使ってC++でプログラムを書いています。「期待している」エラーは何ですか; before obj '' mean?

->expected ";" before obj 
->obj not declared in this scope 

私が解決するにはどうすればよい:

class add 
{ 

    void fun(int b) 
    { 
    int c,d=10; 
    c=d+b; 
    cout<<"d="<<d; 
    } 
} 

私はLinuxでのG ++を使用してコンパイルすると、次のエラーを示しているoperation.h

main.cppに

#include<iostream> 
#include"operation.h" 

using namespace std; 
main() 
{ 
    int a; 
    cout <<"Enter the value a"; 
    cin>>a; 

    //class name add 
    //obj is object of add 
    add obj; 
    obj.fun(a); 
} 

この問題?なぜこうなった?

+0

クラス名は大文字で始める必要があります。これは標準であり、コードを読みやすくしています。 –

+1

私はそれが標準だとはほとんど言いません。一般的ですが、クラスの名前はガイドラインによって異なります。 – GManNickG

+2

標準ライブラリのクラス命名規則に準拠していないものがあれば...どちらも一般的です。 –

答えて

8

クラスaddの先頭にpublic:を追加する必要があります。クラスメンバーのデフォルトは、それらを非公開にすることです。

また、クラス定義の最後にセミコロンがありません。 C++では、終わりの中括弧の後にセミコロンで終わるクラス定義が必要です(実際にその時点で変数を宣言できます)。

+0

私の答えを固定してくれてありがとう、Shog9。私はセミコロンが足りないことに噛まれてしまった。それは簡単に見逃せない。 –

+0

@マーク:問題ありません - 編集中にそれをキャッチし、あなたの答えによく似ていたようです。 – Shog9

0

私にはそれはあなたが持っている唯一の問題ではないように見えます:

$ g++ -c /tmp/ttt.cpp 
In file included from /tmp/ttt.cpp:2: 
/tmp/operation.h: In member function ‘void add::fun(int)’: 
/tmp/operation.h:8: error: ‘cout’ was not declared in this scope 
/tmp/ttt.cpp: At global scope: 
/tmp/ttt.cpp:4: error: expected unqualified-id before ‘using’ 
/tmp/ttt.cpp: In function ‘int main()’: 
/tmp/ttt.cpp:8: error: ‘cout’ was not declared in this scope 
/tmp/ttt.cpp:9: error: ‘cin’ was not declared in this scope 
/tmp/operation.h:4: error: ‘void add::fun(int)’ is private 
/tmp/ttt.cpp:14: error: within this context 

は、あなたが最初のヘッダーファイル内のエラーのすべてに対処していることを確認します。

2

エラーの本当の理由は見当たりませんが、本当にインクルードガードを挿入しなければなりません。クラス定義の後:

// operation.h 
#ifndef OPERATION_H 
#define OPERATION_H 
class add { 
public: 
    void fun(int b) { 
     int c = 0; // always initialize, just in case 
     int d = 10; 
     c = d+b; 
     std::cout << "d=" << d; 
    } 
}; 
#endif 

EDIT: メイン()戻り値の型は存在しません。その時点で「int」を追加する必要があります。

+2

あなたはどのように理由を見ることに失敗しますか? – TStamper

+0

コンパイラエラーの解決策が見つかりませんでした。初期コードには2つの小さな問題が修正されていますが、コンパイラエラーを引き起こすものはありません。ヘッダーガードは必要ありませんが、より複雑なシナリオではダブル定義から救います。 fun()メソッドをpublicにすると、実際の問題が解決された後にアクセス制限エラーが修正されます。 –

+0

それでは、私は思った... C++コンパイラのエラーは時々少し混乱します。 –

1

上記のように、最初に「間違っている」には、クラスブラケットの後にセミコロンがありません。 第2のプライベートアクセス違反です(このメソッドをpublicにします)、

あなたのクラスメソッドの定義をファイル*.cppに入れ、ヘッダーに宣言だけを含めましょう入出力ストリームヘッダを含める)

ファイルのみが含まれている必要がありそう*.hpp

class add { 
public: 
    void fun(int b); 
}; 

*.cpp

void add::fun(int b) 
{ 
    //here goes implementation 
} 
1

どのようにクラスを初期化していますか?以下に相当ないある

add a(params); 

add(params) a; 

微妙な違い、間違い出発以下は、C++での新しい「追加」オブジェクトをインスタンス化するための正しい方法であることに注意してください他の言語と同じようにおそらく "期待される"エラー。

私は上のコメント者に、クラスは大文字にして機能させるべきであることに同意します。これは、はるかに読みやすくするための規約で、他のOO言語で繰り返し表示されます。 OTOHでは、これはあなたの目標として読めるコードを前提としています。 CamelCaseまたはアンダースコアを使用して名前を付けるかどうかは、より主観的であり、したがってより葛藤する、IMHOです。

関連する問題