模板错误消息c++

template error message c++

本文关键字:c++ 消息 错误      更新时间:2023-10-16

我有以下头文件:

#ifndef DATABASE_H
#define DATABASE_H

#include <vector>
#include <iostream>
#include <string>
#include "record.h"
using namespace std;
template <class value>
class Database {
  public:
    void write (ostream& out, DBScope scope) const;
    Database <value>() {};
    ~Database();
  private:
    vector <Record<value> > records;
};
#include "database.tem"
#endif

database.tem:

template <class value>
void Database<value>::write (ostream& out, DBScope scope) const {
 class vector <Record <value> >::iterator itr = records.begin();
 switch (scope) {
    case AllRecords:
      for (; itr != records.end(); itr++) out << itr;
      break;
    case SelectedRecords:
      for (; itr != records.end(); itr++) {
        if (itr.isSelected) out << itr;
      }
      break;
  }
}

我用另一个文件长时间运行了这个头文件,并产生了这个错误消息,注意到在我的头文件中,我有另一个名为database.tem的文件,它是#include "database.tem"到我的database.h文件中:

    database.tem: In member function 'void Database<value>::write (std:: ostream&, DBScope) const [with value = int]':
database.tem: In member function 'void Database<value>::write(std::ostream&, DBScope) const [with value = int]':
interactive.cpp:285:   instantiated from 'bool WriteCommand(Database<value>&) [with value = int]'
interactive.cpp:127:   instantiated from 'bool DispatchCommand(CommandT, Database<value>&) [with value = int]'
interactive.cpp:74:   instantiated from 'void MainLoop(Database<value>&) [with value = int]'
interactive.cpp:99:   instantiated from here
database.tem:6: error: conversion from '__gnu_cxx::__normal_iterator<const Record<int>*, std::vector<Record<int>, std::allocator<Record<int> > > >' to non-scalar type '__gnu_cxx::__normal_iterator<Record<int>*, std::vector<Record<int>, std::allocator<Record<int> > > >' requested
interactive.cpp:285:   instantiated from 'bool WriteCommand(Database<value>&) [with value = int]'
interactive.cpp:127:   instantiated from 'bool DispatchCommand(CommandT, Database<value>&) [with value = int]'
interactive.cpp:74:   instantiated from 'void MainLoop(Database<value>&) [with value = int]'
interactive.cpp:99:   instantiated from here
database.tem:11: error: no match for 'operator<<' in 'out << itr'

我不知道这个消息在说什么,有人能帮我

第一个错误是因为该方法是const,因此records是const并且reconds.begin()返回一个const_iterator

template <class value>
void Database<value>::write (ostream& out, DBScope scope) const {
 vector <Record <value> >::const_iterator itr = records.begin();

第二个错误意味着您可能想要取消引用迭代器:

for (; itr != records.end(); itr++) out << *itr;

看起来你只发布了一条部分错误消息,但错误可能是你需要写itr->isSelected,而不是itr.isSelected.

此外,在使用迭代器时,最好使用++itr而不是itr++。

您试图打印的是迭代器对象,而不是它所指的值:

out << itr;

用代替

out << *itr;

还要确保Record类定义了方法或函数:

ostream& out operator <<(ostream& out); // method
ostream& out operator <<(ostream& out, const Record &); //function