我已经以这种方式在我的班级中定义了一个静态函数(相关代码片段)
#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看起来像重复但我不知道 - 正如他所做的那样 - 我是对的,编译器很挑剔。感谢任何帮助,我找不到任何关于此的信息!
答案 0 :(得分:31)
在.cpp
文件的定义中,删除关键字static
:
// No static here (it is not allowed)
std::string neighborAtt::intToStr(int number)
{
...
}
只要头文件中有static
关键字,编译器就知道它是静态类方法,所以你不应该也不能在源文件的定义中指定它。
在C ++ 03中,存储类说明符是关键字auto
,register
,static
,extern
和{{ 1}},它告诉编译器如何存储数据。如果您看到引用存储类说明符的错误消息,则可以确定它引用了其中一个关键字。
在C ++ 11中,mutable
关键字具有不同的含义(它不再是存储类说明符)。