相关疑难解决方法(0)

为什么模板只能在头文件中实现?

引自C++标准库:教程和手册:

目前使用模板的唯一可移植方法是使用内联函数在头文件中实现它们.

为什么是这样?

(澄清:头文件不是唯一的便携式解决方案.但它们是最方便的便携式解决方案.)

c++ templates c++-faq

1660
推荐指数
14
解决办法
46万
查看次数

C++模板,链接错误

我在调用模板类时遇到问题.我声明了一个新的类型名称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++ linker templates

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

包括.cpp文件?

可能重复:
为什么模板只能在头文件中实现?

我最近一直在尝试使用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++ linker templates

14
推荐指数
1
解决办法
6665
查看次数

未定义的模板成员引用

我是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)

我的相关代码:

Maze.h

#include "Coordinate.h"
#include "Stack.h"
....
....
/**
 * Contains the stack object
 *
 * @var  Stack stack
 * @access private
 */
Stack<Coordinate> *stack;
...
...
Run Code Online (Sandbox Code Playgroud)

Maze.cpp

#include "Maze.h"
...
...
Maze::Maze()
{
    // IT SHOWS THAT THE FOLLOWING LINE HAS AN ERROR///
    stack = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates undefined-reference

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

使用模板时出现"错误LNK2019:未解析的外部符号"

可能重复:
为什么在使用模板时会出现"未解析的外部符号"错误?

我在代码中使用模板,而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*)".谁知道我哪里错了?非常感谢!

c++ templates

3
推荐指数
2
解决办法
6527
查看次数

模板类 - 未解析的外部符号

我经常收到这个错误,我不知道为什么。有人可以帮我找出原因吗?

编辑:删除代码

c++ templates class

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

未定义的引用`LinkedList <int> :: push_front(int)

可能重复:
为什么在使用模板时会出现"未解析的外部符号"错误?

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)

c++ templates undefined-reference

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

ERROR LNK2019:未解析的外部符号,c ++

我已经编写了一个模板类,用于地图/字典数据结构,并且不断收到这个奇怪的错误(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)

c++ linker-errors visual-studio-2010 lnk2019

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

C++未定义的模板类方法引用

我总是得到

未定义的引用`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)

// …

c++ templates undefined-reference

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