web-dev-qa-db-ja.com

静的関数:ストレージクラスはここでは指定できません

この方法でクラス内で関数を静的として定義しました(関連するコードのスニペット)

#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)が表示され、問題の原因を特定できません。

pS私はすでに読んだ this は重複しているように見えますが、彼がそうであるように、私が正しいこと、およびコンパイラーが気難しいことを知りません。どんな助けもありがたいです、私はこれに関するどんな情報も見つけることができません!

19
sccs

.cppファイルの定義で、キーワードstaticを削除します。

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

ヘッダーファイルにstaticキーワードがある限り、コンパイラーはそれが静的クラスメソッドであることを認識しているため、ソースファイルの定義でそれを指定することはできません。

C++ 03では、ストレージクラス指定子はキーワードautoregisterstaticexternmutableであり、データの格納方法をコンパイラーに伝えます。ストレージクラス指定子を参照するエラーメッセージが表示された場合は、それらがこれらのキーワードの1つを参照していることを確認できます。

C++ 11では、autoキーワードの意味が異なります(ストレージクラス指定子ではなくなりました)。

34
Adam Rosenfield