C++ - 对最近创建的类的 undefined reference !

标签 c++ codeblocks undefined-reference

我刚刚创建了这个新类:

//------------------------------------------------------------------------------
#ifndef MULTITHREADEDVECTOR_H
#define MULTITHREADEDVECTOR_H
//------------------------------------------------------------------------------
#include <vector>
#include <GL/GLFW.h>
//------------------------------------------------------------------------------
template<class T>
class MultithreadedVector {

    public:

        MultithreadedVector();

        void push_back(T data);

        void erase(typename std::vector<T>::iterator it);

        std::vector<T> get_container();
    private:

        std::vector<T> container_;
        GLFWmutex th_mutex_;


};
//------------------------------------------------------------------------------
#endif // MULTITHREADEDVECTOR_H_INCLUDED
//------------------------------------------------------------------------------

类的定义:

//------------------------------------------------------------------------------
#include "MultithreadedVector.h"
//------------------------------------------------------------------------------
using namespace std;
//------------------------------------------------------------------------------
template<class T>
MultithreadedVector<T>::MultithreadedVector() {

    th_mutex_ = glfwCreateMutex();
}

template<class T>
void MultithreadedVector<T>::push_back(T data) {

    glfwLockMutex(th_mutex_);
    container_.push_back(data);
    glfwUnlockMutex(th_mutex_);

}

template<class T>
void MultithreadedVector<T>::erase(typename vector<T>::iterator it) {

    glfwLockMutex(th_mutex_);
    container_.erase(it);
    glfwUnlockMutex(th_mutex_);
}

template<class T>
vector<T> MultithreadedVector<T>::get_container() {


    return container_;

}

现在的问题是,当我尝试在我的代码中将它用作另一个类的静态成员时:

// VehicleManager.h
#ifndef MULTITHREADEDVECTOR_H
#define MULTITHREADEDVECTOR_H

#include "MultithreadedVector.h"
#include "Vehicle.h"
class Foo {

   public:
     // stuffs
   private:
     static MultithreadedVector<Vehicle> vehicles_; 
     ...
}

#endif

然后里面:VehicleManager.cpp

#include "VehicleManager.h"

MultithreadedVector<Vehicle> VehicleManager::vehicles_;

void VehicleManager::Method() {

  Vehicle vehicle;
  VehicleManager::vehicles_.push_back(vehicle);

}

但它无法编译 :(, 我每次都会收到此错误消息 :

C:\***\VehicleManager.cpp|188|undefined reference to `MultithreadedVector<Vehicle>::push_back(Vehicle)'|

我真的不明白为什么,尤其是我在 VehicleManager.cpp 的全局范围内定义了静态类成员。

PS:我正在使用 Code::Blocks。

谢谢!

最佳答案

这就是盲目地将类模板实现移动到 cpp 文件时会发生的情况。

要实现这一点,您必须确切地知道您将为哪些类型的 T 实例化类模板并在 cpp 文件中指定它们。

在这种情况下,将其放入 cpp 文件中:

template class MultithreadedVector<Vehicle>;

请注意,cpp 文件必须知道Vehicle

关于C++ - 对最近创建的类的 undefined reference !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001375/

相关文章:

C,简单的 if else 语句上的调试器断点

c++ - 读取文件 ".txt"并将每一行的数据分配给循环列表中的新节点 C++

C++ 代码:: block 自动完成不工作

无法使用多线程在我的树莓派上编译我的 C 程序

c++ - 未定义对 `__stack_chk_fail' 的引用

c++ - 我收到 "undefined reference"错误,我不明白为什么 (C++ OO)

c++ - 将 Boost 与 Team Foundation Server 结合使用

c++ - 将本地结构传递给 count_if

c++ - gcc - 将多个 c 文件链接到一个 c++ 文件

c++ - DWORD 中的包装值