7

a の初期化static const set<string>が正しくないようです。これに関するガイドラインをいただければ幸いです。

obj.h:

class obj
{
  ...

private:
  static const set<string> keywords;
  ...

}

obj.cpp:

const string kw[] = {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};
const set<string> obj::keywords = (kw,kw + sizeof(kw)/sizeof(kw[0]));

しかし、これはエラーを引き起こします: error: conversion from ‘const string* {aka const std::basic_string<char>*}’ to non-scalar type ‘const std::set<std::basic_string<char> >’ requested

このセットを初期化する正しい方法を教えてもらえますか?

4

4 に答える 4

23

を初期化するためになぜ配列を使用しているのか疑問に思っていますstd::set

セットを次のように直接初期化できます。

const set<string> obj::keywords {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};

C++11 をサポートするコンパイラを使用している場合は、これを行う必要があります。


あなたのコードの何が問題なのかについては、他の2つの回答が言うように、削除して=ください:

const string kw[] = {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};
const set<string> obj::keywords(kw,kw + sizeof(kw)/sizeof(kw[0]));

それが役立つことを願っています。

于 2013-05-03T04:15:15.130 に答える
6

を取り出します=。コンストラクタを呼び出すだけです。

const set<string> obj::keywords (kw,kw + sizeof(kw)/sizeof(kw[0]));
于 2013-05-03T04:11:59.307 に答える
2

等号を削除する必要があります。

const set<string> obj::keywords(kw,kw + sizeof(kw)/sizeof(kw[0]));

起こっているのは、恐ろしいコンマ演算子です。まず、結果を評価kwして破棄します。次に、それを評価kw + sizeof(kw)/sizeof(kw[0])してコピー初期化を試みますkeywords

于 2013-05-03T04:12:16.107 に答える