この方法でクラス内で関数を静的として定義しました(関連するコードのスニペット)
#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 は重複しているように見えますが、彼がそうであるように、私が正しいこと、およびコンパイラーが気難しいことを知りません。どんな助けもありがたいです、私はこれに関するどんな情報も見つけることができません!
.cpp
ファイルの定義で、キーワードstatic
を削除します。
// No static here (it is not allowed)
std::string neighborAtt::intToStr(int number)
{
...
}
ヘッダーファイルにstatic
キーワードがある限り、コンパイラーはそれが静的クラスメソッドであることを認識しているため、ソースファイルの定義でそれを指定することはできません。
C++ 03では、ストレージクラス指定子はキーワードauto
、register
、static
、extern
、mutable
であり、データの格納方法をコンパイラーに伝えます。ストレージクラス指定子を参照するエラーメッセージが表示された場合は、それらがこれらのキーワードの1つを参照していることを確認できます。
C++ 11では、auto
キーワードの意味が異なります(ストレージクラス指定子ではなくなりました)。