静态功能:此处可能未指定存储类

时间:2013-03-31 03:08:15

标签: c++ visual-studio-2010 class static

我已经以这种方式在我的班级中定义了一个静态函数(相关代码片段)

#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看起来像重复但我不知道 - 正如他所做的那样 - 我是对的,编译器很挑剔。感谢任何帮助,我找不到任何关于此的信息!

1 个答案:

答案 0 :(得分:31)

.cpp文件的定义中,删除关键字static

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

只要头文件中有static关键字,编译器就知道它是静态类方法,所以你不应该也不能在源文件的定义中指定它。

在C ++ 03中,存储类说明符是关键字autoregisterstaticextern和{{ 1}},它告诉编译器如何存储数据。如果您看到引用存储类说明符的错误消息,则可以确定它引用了其中一个关键字。

在C ++ 11中,mutable关键字具有不同的含义(它不再是存储类说明符)。