2013-03-31 9 views
8

私は、このように私のクラスの静的としての機能を定義している(関連するコードの抜粋)静的機能:ストレージ・クラスここ

として

#ifndef connectivityClass_H 
#define connectivityClass_H 

class neighborAtt 
{ 
public: 
    neighborAtt(); //default constructor 
    neighborAtt(int, int, int); 

    ~neighborAtt(); //destructor 

    static std::string intToStr(int number); 

private: 
    int neighborID; 
    int attribute1; 
    int attribute2; 

#endif 

と.cppファイルで指定することはできません

#include "stdafx.h" 
#include "connectivityClass.h" 

static std::string neighborAtt::intToStr(int number) 
{ 
    std::stringstream ss; //create a stringstream 
    ss << number; //add number to the stream 
    return ss.str(); //return a string with the contents of the stream 
} 

.cppファイルに「ストレージクラスがここで指定されていない可能性があります」というエラー(VS C++ 2010)が表示され、何が間違っているのかわかりません。

p.s.私は既に複写のように見えるthisを読んだことがありますが、彼がしているようにわかりません - 私は正しいとコンパイラは厄介です。どんな助けもありがとう、私はこれについての情報を見つけることができません! .cppファイルの定義で

答えて

19

、キーワードstatic削除:

// No static here (it is not allowed) 
std::string neighborAtt::intToStr(int number) 
{ 
    ... 
} 

を限り、あなたはヘッダファイルにstaticのキーワードを持っているように、コンパイラが静的クラスメソッドです知っているので、あなたはいけませんソースファイルの定義で指定することはできません。

C++ 03では

ストレージクラス指定子データが格納されているかをコンパイラに伝えるキーワードautoregisterstaticextern、およびmutable、です。ストレージクラス指定子を参照するエラーメッセージが表示された場合は、そのキーワードの1つを参照していることを確認できます。

C++ 11では、autoキーワードは意味がありません(これはもはや記憶域クラス指定子ではありません)。

+0

あなたは 'mutable'について確信していますか?これはBNFの* storage-class-specifier *として現れますが、それは1つとして動作しません。 'thread_local'はC++ 11の記憶域クラス指定子です。 –

+0

@BenVoigt:はい、C++ 03§7.7.1は、これらの5つの指定子を明示的にリストしています。 –

関連する問題