-3

我收到了这个错误,它似乎对谷歌搜索来说太模糊了,所以我把它交给你了!我正在尝试创建一个包含 Account 对象的链表对象。

#include "Customer.h"
#include "LinkedList.h"
#include "Account.h"
#include "Mortgage.h"
#include "CurrentAcc.h"
#include "JuniorAcc.h"
#include "transaction.h"

#include <iostream>
#include <string>

using namespace std;


string name;
string address;
string telNo;
char gender;
string dateOfBirth;
list<Account> accList;  // Error
list<Mortgage> mortList;  //Error

我觉得我没有正确声明我的链接列表,但想不出其他方法。

我觉得下一段代码是由于我的错误声明造成的。

void Customer::openCurrentAccount(int numb, double bal, int cl, string type, double Interest){
Current acc(numb,bal,cl,type,Interest); //Error - Expression must have class type.
accList.add(acc);
}

这是我的链接列表类 .h 文件的创建。

#pragma once

#include <iostream>
using namespace std;

template <class T>
class node;

template <class T>

class list
{

public:
list() { head = tail = NULL; }
~list();
void add(T &obj);
T remove(int ID);
void print(ostream &out);
T search(int ID);

private:
node<T> *head, *tail;
};

template <class T>
class node

{ public: node() {next = NULL;} //private: T 数据;节点*下一个;};

template <class T>
list<T>::~list()
{
}
4

1 回答 1

3

您正在定义自己list在全局命名空间中调用的类,并将using namespace std;其头文件放入以将整个标准库转储到全局命名空间中。这意味着您list在全局命名空间中有两个可用的模板,这将导致歧义并因此编译错误。

你应该:

  • 避免放入using namespace std;源文件
  • 永远不要把它放在头文件中,因为它会对使用该头文件的任何人造成命名空间污染
  • 避免将自己的声明放在全局命名空间中
  • 避免给自己的声明与标准库中的东西同名
  • 使用标准库设施而不是编写自己的版本。
于 2012-11-28T11:54:23.130 回答