相关疑难解决方法(0)

对静态类成员的未定义引用

谁能解释为什么以下代码无法编译?至少在g ++ 4.2.4上.

更有趣的是,为什么它会在我将MEMBER转换为int时进行编译?

#include <vector>

class Foo {  
public:  
    static const int MEMBER = 1;  
};

int main(){  
    vector<int> v;  
    v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
    v.push_back( (int) Foo::MEMBER ); // OK  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ g++

191
推荐指数
5
解决办法
11万
查看次数

c ++未定义的静态变量引用

我不知道为什么这段代码不起作用.所有的源文件都编译好了,但是当我尝试链接它们时,编译器会因为未定义的引用错误而对我大喊大叫.这是代码:

main.cpp中:

#include "SDL/SDL.h"
#include "Initilize.cpp"

int main(int argc, char* args[]) 
{
    //Keeps the program looping
    bool quit = false;
    SDL_Event exit;
    //Initilizes, checks for errors
    if(Initilize::Start() == -1) 
    {
        SDL_Quit();
    }
    //main program loop
    while(quit == false) 
    {
        //checks for events
        while(SDL_PollEvent(&exit)) 
        {
            //checks for type of event;
            switch(exit.type) 
            {
                case SDL_QUIT:
                quit = true;
                break;
            }
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Initilize.h:

#ifndef INITILIZE_H
#define INITILIZE_H
#include "SDL/SDL.h"

/* Declares surface screen, its attributes, and Start(); */
class …
Run Code Online (Sandbox Code Playgroud)

c++ linker sdl reference undefined

8
推荐指数
2
解决办法
2万
查看次数

由于使用静态变量而导致未定义的引用错误

我今天早些时候提出了一个关于单身人士的问题,我在理解遇到的一些错误时遇到了一些困难.我有以下代码:

Timing.h

class Timing {

public:
    static Timing *GetInstance();
private:
    Timing();
    static Timing *_singleInstance;
};
Run Code Online (Sandbox Code Playgroud)

Timing.cpp

 #include "Timing.h"

 static Timing *Timing::GetInstance() {  //the first error
    if (!_singleInstance) {
        _singleInstance = new Timing();  //the second error
    }
    return _singleInstance;
}
Run Code Online (Sandbox Code Playgroud)

这段代码中有两个错误,我无法弄清楚.

  1. 该方法GetInstance()在标头中声明为static.为什么在cpp文件中我必须省略这个词static?它给出了错误:"无法声明成员函数'静态时序*Timing :: GetInstance()'具有静态链接".写它的正确方法是:

    Timing *Timing::GetInstance() { ... }  
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为什么我不能写_singleInstance = new Timing();?它给出了错误:"对Timing :: _ singleInstance的未定义引用".我通过_singleInstance在cpp文件中定义为全局变量来解决此错误.

c++ static static-members

2
推荐指数
1
解决办法
2881
查看次数

标签 统计

c++ ×3

g++ ×1

linker ×1

reference ×1

sdl ×1

static ×1

static-members ×1

undefined ×1