1

プログラミングを使用して C++ の学習を始めたばかりです: C++ を使用した原則と実践。その本は、私のために物事を設定するヘッダーファイルを使用するように私に言っています。問題のヘッダー ファイルは、http://www.stroustrup.com/Programming/std_lib_facilities.hで入手できます。

私は素ふるいを書くように求める演習を試みています。次のプログラムがあります。

#include "std_lib_facilities.h"

void sieve_erat(int end) {
  vector<bool> primes (end, true);
  int final_element = sqrt(end) + 1;
  for (int i=2; i<final_element; ++i)
    if (primes[i])
      for (int j=i*i; j<end; j += i)
    primes[j] = false;

  for (int p=2; p<end; ++p)
    if (primes[p])
      cout << p << " ";
  cout << '\n';
}

int main() {
  cout << "Enter the number to which I should find the primes: ";
  cin >> max;
  sieve_erat(max);
  return 0;
}

しかし、自分のコンピューターでコンパイルするとg++ primes.cpp、次の出力が得られます。

~/src/c++ $ g++ primes.cpp 
In file included from /usr/include/c++/4.8.1/ext/hash_map:60:0,
                 from std_lib_facilities.h:34,
                 from primes.cpp:4:
/usr/include/c++/4.8.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
 #warning \
  ^
In file included from primes.cpp:4:0:
std_lib_facilities.h: In instantiation of ‘T& Vector<T>::operator[](unsigned int) [with T = bool]’:
primes.cpp:36:17:   required from here
std_lib_facilities.h:88:38: error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector<bool, std::allocator<bool> >::reference {aka std::_Bit_reference}’
   return std::vector<T>::operator[](i);
                                  ^

この質問に対する答えをウェブで見つけようと最善を尽くしましたが、メッセージが何を間違っていると言っているのか理解できません! 誰かが親切に私を正しい方向に向けてくれますか?

ありがとうございました。

4

2 に答える 2

2

一見すると、 のベクトルがbool問題のようです。残念ながら、反復子は参照を返すことができないため、ベクトルと bool 値はうまく組み合わせられませんbool&。かなり詳細な説明については、この質問を参照してください。

于 2013-07-29T17:40:21.410 に答える