1

Sol.h に次のコードがありますが、学校の規則によりほとんどが省略されています。

template <typename T,int promote = 1, typename compare = std::less<T>() >
class Sol{
private:
  struct node{
    T data;
    struct node *next;
    struct node *previous;
  };
node *head, *tail;
public:
  typedef unsigned int size_type;
  typedef T key_type;
  typedef T value_type;
  size_type count;
  Sol() : head(0), tail(0) {
    count=0;
  }

基本的には vector に似たコンテナですが、テンプレート化に必要ないくつかのことを行います。「typename compare = std::less< T>」を取得できないようです-スペースを無視します。

テスト コードをコンパイルすると、Sol.h から 2 つのエラーが発生し、残りはすべてそれらに関連しています。

>temple> g++ -Wall -Wextra -ansi -pedantic Sol.h main.cc
Sol.h:6:61: error: expected type-specifier
Sol.h:6:61: error: expected '>'
main.cc: In function 'int main()':
main.cc:19:19: error: template argument 3 is invalid
main.cc:19:24: error: invalid type in declaration before '(' token
main.cc:19:48: error: expression list treated as compound expression in initializer [-fpermissive]
main.cc:19:48: warning: left operand of comma operator has no effect [-Wunused-value]
main.cc:19:48: error: invalid conversion from 'char*' to 'int' [-fpermissive]
main.cc:20:19: error: template argument 3 is invalid
main.cc:20:31: error: expected initializer before 'it'
main.cc:22:13: error: request for member 'erase' in 'foo', which is of non-class type 'int'
main.cc:24:9: error: 'it' was not declared in this scope
main.cc:24:18: error: request for member 'find' in 'foo', which is of non-class type 'int'
main.cc:25:9: error: request for member 'end' in 'foo', which is of non-class type 'int'
main.cc:28:13: error: request for member 'find' in 'foo', which is of non-class type 'int'
main.cc:30:13: error: request for member 'find' in 'foo', which is of non-class type 'int'
main.cc: In function 'std::string cat(const T&) [with T = int, std::string = std::basic_string<char>]':
main.cc:23:24:   instantiated from here
main.cc:12:35: error: 'int' is not a class, struct, or union type
main.cc:12:50: error: request for member 'end' in 'con', which is of non-class type 'const int'
main.cc:12:35: error: 'int' is not a class, struct, or union type
main.cc:12:35: error: 'int' is not a class, struct, or union type
main.cc:12:35: error: 'int' is not a class, struct, or union type

明確にするために、6 行目はテンプレート行です。

4

1 に答える 1

2

変化する

typename compare = std::less<T>()

typename compare = std::less<T>

オブジェクトではなく、タイプが必要です。

また、それが定義され#include <functional>ている場所であるため、実行する必要があります。std::less

于 2012-04-30T02:53:06.590 に答える