gpt4 book ai didi

c++ - 模板文件中的类 'does not name a type' 错误

转载 作者:行者123 更新时间:2023-11-28 00:11:16 26 4
gpt4 key购买 nike

我一直在努力找出我在编译器中遇到错误的原因,在模板文件“Node.template”中指出'node<Obj>不命名类型'。

我是类模板的新手,四处寻找答案,但我仍然无法解决这个特殊问题。

这是两个文件的代码:

//Node.h
#ifndef NODE_CAMERON_H
#define NODE_CAMERON_H
#include <string>

using namespace std;

namespace oreilly_A2 {
template <typename Obj>
class node {

public:
typedef std::string value_type;

node(); //constructor for node

node(const value_type& val, Obj* newNext); //constructor with parameters

void set_data(const value_type& new_data); //set the word that this node contains

void set_link(Obj* new_link); //set the 'next' Obj
void set_previous(Obj* new_prev);

value_type data() const; //return this node's word

const Obj* link() const; //return next

const Obj* back() const;

Obj* link(); //return next

Obj* back();

private:

Obj* next; //the next Obj
Obj* previous;
value_type word; //the word this node contains

};
}
#include "Node.template"
#endif

Node.template 文件:

//Node.template
template <typename Obj>
node<Obj>::node(const node::value_type& val=value_type(), Obj* newNext=NULL) {
word = val;
next = newNext;
}

template <typename Obj>
node<Obj>::~node() {}

template <typename Obj>
void node<Obj>::set_data(const value_type& new_data){
word = new_data;
}


template <typename Obj>
void node<Obj>::set_link(Obj* new_link){
next = new_link;

}


template <typename Obj>
void node<Obj>::set_previous(Obj* new_prev) {
previous = new_back;
}


template <typename Obj>
value_type node<Obj>::data() const { //return the word
return word;
}


template <typename Obj>
const Obj* node<Obj>::link() const { //return next node (const function)
return next;
}


template <typename Obj>
const Obj* node<Obj>::back() const { //return previous node (const)
return previous;
}


template <typename Obj>
Obj* node<Obj>::link() {
return next; //return next node (non-const)
}


template <typename Obj>
Obj* node<Obj>::back() { //return previous node (const)
return previous;
}

最佳答案

您在命名空间内声明了类模板...

...但是在定义其成员函数时忘记了命名空间。

确实没有名为 node<Obj> 的类型, 只有名为 oreilly_A2::node<Obj> 的类型(∀ Obj ).

你需要namespace oreilly_A2 { }Node.template 中。

另外,请停止写using namespace std在头文件中。

关于c++ - 模板文件中的类 'does not name a type' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com