相关疑难解决方法(0)

什么是未定义的引用/未解析的外部符号错误,我该如何解决?

什么是未定义的参考/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?

随意编辑/添加您自己的.

c++ c++-faq linker-errors unresolved-external undefined-reference

1418
推荐指数
32
解决办法
52万
查看次数

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

谁能解释为什么以下代码无法编译?至少在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万
查看次数

无法在类中初始化静态地图

我正在尝试
map<string, int>
在我的程序中初始化一个静态映射,如下所示:

测试应用程序

class testApp(){
public:
void setup();
void update();
void renew();
static map<string, int> _someMap;
};
Run Code Online (Sandbox Code Playgroud)

测试应用程序

testApp::setup(){
   _someMap["something"] = 1;
   _someMap["something2"] = 2;
cout<<_someMap["something"]<<"\n";
}
Run Code Online (Sandbox Code Playgroud)

我不想boost使用 map 的这种短暂使用并为我的代码添加源依赖项。我不在,C++11而且程序中没有构造函数,因为该类是某个框架的类。我在 Xcode 上执行上述操作时.cpp,出现以下错误:

Undefined symbols for architecture i386:
  "testApp::mapppp", referenced from:
      testApp::setup() in testApp.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

-->另外,假设我的地图是私有的,为此我尝试在课堂上这样做:

...
private:
static someVariable;
static void someFunction(); …
Run Code Online (Sandbox Code Playgroud)

c++ static map

5
推荐指数
1
解决办法
3144
查看次数

C++ 未定义引用(静态成员)

可能的重复:
C++:对静态类成员的未定义引用

记录器.h:

class Logger {

private:
    Logger();
    static void log(const string& tag, const string& msg, int level);
    static Mutex mutex;


public:
    static void fatal(const string&, const string&);
    static void error(const string&, const string&);
    static void warn(const string&, const string&);
    static void debug(const string&, const string&);
    static void info(const string&, const string&);
};
Run Code Online (Sandbox Code Playgroud)

记录器.cpp:

#include "Logger.h"
#include <sstream>
ofstream Logger::archivoLog;

void Logger::warn(const string& tag, const string& msg){
    Logger::mutex.lock();
    log(tag, msg, LOG_WARN);
    Logger::mutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)

编译时,我收到此错误:

other/Logger.o: In function `Logger::warn(std::basic_string<char, std::char_traits<char>, std::allocator<char> …
Run Code Online (Sandbox Code Playgroud)

c++ static-methods mutex static-members

3
推荐指数
1
解决办法
4379
查看次数

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

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

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 ++中创建单例类时,静态函数不能引用静态变量?

我试图理解单例设计模式并创建了一个最简单的模式:

#include <iostream>


class mySingleton{

private:
   static mySingleton *ptr;
   mySingleton(){ }    

public:
   static mySingleton* getInstance(){
     if(!ptr){
        ptr = new mySingleton();
        return ptr;
     } else return ptr;
   }

   void msg(){
     std::cout << " Hello World!! " << std::endl;
   }

};


int main(){

mySingleton* obj = mySingleton::getInstance();
mySingleton* obj2 = mySingleton::getInstance();

return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到:

Undefined symbols for architecture x86_64:
"mySingleton::ptr", referenced from:
    mySingleton::getInstance()       in ccm822LI.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

为什么我不能在静态函数中使用ptr,因为ptr也是一个静态变量?我在这里错过了什么吗?

c++ singleton design-patterns

0
推荐指数
1
解决办法
135
查看次数