C++ 如何在c++;

C++ 如何在c++;,c++,C++,在我的.cpp文件中有static int defaultvalue=1,我有一个类似这样的静态类函数,它在同一个文件中使用全局静态变量defaultvalue //static function int Myclass::func(int rate) { int finalrate = defaultvalue; switch(rate) { case 2: fina

在我的
.cpp文件中有
static int defaultvalue=1
,我有一个类似这样的
静态类函数
,它在同一个文件中使用全局静态变量
defaultvalue

//static function
    int Myclass::func(int rate)
    {
        int finalrate = defaultvalue;
        switch(rate)
        {    
            case 2:
                finalrate=2;
                break;

            default:
                break;
        }    
        return finalrate;
    }
当我试图编译它时,我得到了一个错误,错误是
未定义对Myclass::defaultvalue的引用。


谁能帮我一下吗?谢谢

您需要在h中将其声明为extern,然后在.cpp中将其声明为“body”

对于您的情况:

extern int defaultValue;
在.cpp中

int MyClass::defaultValue=0;

如果该变量是在不同的模块中定义的,则在引用该变量之前,您必须在当前模块中使用
extern
关键字,例如

extern int defaultValue;
这将通知编译器它是在别处定义的。至少有一个模块应具有非外部定义

int defaultvalue;
否则他们会不高兴

或者,您可以在
.h
文件中放置一个常量定义,并在每个
.cpp
源中包含
.h
文件。例如:

// File defval.h
const int defaultvalue = 42;
然后在源代码中,使用

#include defval.h

或者把它放在课堂上:

class Myclass
{
  public:
     static int func(int rate);
     static const int defaultvalue = 1 ;
};

我认为最好的方法是将静态成员放入类中,然后不要忘记在cpp文件中初始化它

file.h
class Myclass
{
  public:
     static int func(int rate);
     static int defaultvalue;
};

file.cpp
int MyClass::defaultValue=0;
int Myclass::func(int rate)
{
...
}

try::defaultvalue将指定全局名称空间如果它位于不同的文件中,则可能需要将其声明为extern。它们位于同一文件“如何在c++中使用全局静态变量”-只是不需要。编译器正在查找
Myclass::defaultvalue
,但它听起来不像
defaultvalue
Myclass
的成员。不管怎样,这个代码很愚蠢。没有理由在这里或其他任何地方使用全局变量。