我在调用模板类时遇到问题.我声明了一个新的类型名称Array,它是一个模板;
在.hpp文件中:
template <typename T>
class Array
{
public:
Array();
};
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中:
template <typename T>
Array<T>::Array()
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
主要:
Array<int> arr;
Run Code Online (Sandbox Code Playgroud)
我得到了Linkage错误:未解析的外部符号到ctor.
任何的想法?
可能重复:
为什么模板只能在头文件中实现?
我最近一直在尝试使用C++.目前我正在尝试编写一些我确定至少已经完成过一次的东西:一个简单的LinkedList类.代码完成了,但我不知道怎么编译它.我一直在谷歌搜索,似乎我正在链接目标文件错误.这就是我的代码基本上是这样的:
TEST.CPP
#include "linkedlist.h"
int main()
{
LinkedList<int> list;
// do something
}
Run Code Online (Sandbox Code Playgroud)
linkedlist.h
template <typename T>
class LinkedList
{
// a lot of function and variable definitions
}
Run Code Online (Sandbox Code Playgroud)
然后是一个名为linkedlist.cpp的.cpp文件,其中包含LinkerList类的所有实际代码.尝试使用以下命令编译test.cpp时:
g++ ..\src\test.cpp
Run Code Online (Sandbox Code Playgroud)
我被告知有一个未定义的引用'LinkedList :: LinkedList()'.所以我一直认为它被链接错误,因为有多个.cpp文件,所以我尝试了这样:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
Run Code Online (Sandbox Code Playgroud)
但是,这并没有改变任何事情.错误消息保持不变.我一直试图在互联网上找到一些信息,然而,它并没有真正解决.
我是C++的新手,在Ubuntu 10.04上使用NetBeans IDE准备作业.我使用g ++作为C++编译器.
错误消息:
build/Debug/GNU-Linux-x86/Maze.o: In function `Maze':
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:69: undefined reference to `Stack<Coordinate>::push(Coordinate)'
Maze/Maze.cpp:79: undefined reference to `Stack<Coordinate>::isEmpty()'
Maze/Maze.cpp:87: undefined reference to `Stack<Coordinate>::destroy()'
Run Code Online (Sandbox Code Playgroud)
我的相关代码:
#include "Coordinate.h"
#include "Stack.h"
....
....
/**
* Contains the stack object
*
* @var Stack stack
* @access private
*/
Stack<Coordinate> *stack;
...
...
Run Code Online (Sandbox Code Playgroud)
#include "Maze.h"
...
...
Maze::Maze()
{
// IT SHOWS THAT THE FOLLOWING LINE HAS AN ERROR///
stack = …Run Code Online (Sandbox Code Playgroud) 我在代码中使用模板,而LNK2019始终存在错误.这是我的代码的一部分:
Method.h
template<typename type>
void Method(Model<type>* sys);
Run Code Online (Sandbox Code Playgroud)
Method.cpp
template<typename type>
void Method(Model<type>* sys){ blablabla;}
Run Code Online (Sandbox Code Playgroud)
Model.h
template<typename type>
class Model{ blablabla;}
class Model1:public Model<double>{ blablabla;}
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
Model<double> *sys=new Model1();
Method(sys);
Run Code Online (Sandbox Code Playgroud)
但是,始终显示错误LNK2019:函数_main中引用的未解析的外部符号"void __cdec1 Method(class Model*)".谁知道我哪里错了?非常感谢!
LinkedList.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include<iostream>
template<class T> class LinkedList;
//------Node------
template<class T>
class Node {
private:
T data;
Node<T>* next;
public:
Node(){data = 0; next=0;}
Node(T data);
friend class LinkedList<T>;
};
//------Iterator------
template<class T>
class Iterator {
private:
Node<T> *current;
public:
friend class LinkedList<T>;
Iterator operator*();
};
//------LinkedList------
template<class T>
class LinkedList {
private:
Node<T> *head;
public:
LinkedList(){head=0;}
void push_front(T data);
void push_back(const T& data);
Iterator<T> begin();
Iterator<T> end();
};
#endif /* LINKEDLIST_H */
Run Code Online (Sandbox Code Playgroud)
LinkedList.cpp
#include "LinkedList.h" …Run Code Online (Sandbox Code Playgroud) 我已经编写了一个模板类,用于地图/字典数据结构,并且不断收到这个奇怪的错误(ERROR LNK2019:未解析的外部符号)
码:
AssArray.h:
#pragma once
template <class K,class D>
class AssArray
{
int _size;
int _position;
D* _data;
K* _key;
public:
AssArray(int);
~AssArray(void);
const D& operator [](K k) const;
D& operator [](K k);
};
Run Code Online (Sandbox Code Playgroud)
AssArray.cpp:
#include "StdAfx.h"
#include "AssArray.h"
template <class K,class D>
AssArray<K,D>::AssArray(int size)
{
_size=size;
_data = new D[size];
_key = new K[size];
_position=0;
}
template <class K,class D>
AssArray<K,D>::~AssArray(void)
{
delete[] _data;
delete[] _key;
}
template <class K,class D>
const D& AssArray<K,D>::operator [](K k) const
{ …Run Code Online (Sandbox Code Playgroud) 我总是得到
未定义的引用`Graph :: InsertVertex(std :: string)'
如果我编译我的项目!有什么提示他为什么不能解决这个问题?(所有文件都在netbeans项目文件夹中)
// main.cpp
#include <cstdlib>
#include <string>
#include "Graph.h"
using namespace std;
int main(int argc, char** argv)
{
Graph<string> *graph = new Graph<string>(); // <--- ERROR
graph->InsertVertex("A");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
// Node.h
#include <iostream>
#include "Graph.h"
template<class T>
class Node
{
friend class Graph;
public:
Node(T val)
{
this->data = val;
this->vertList = NULL;
this->next = NULL;
}
Node(const Node& orig);
virtual ~Node();
private:
T data;
Node<T> *vertList;
Node<T> *next;
int status;
};
Run Code Online (Sandbox Code Playgroud)
// …