Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C+的原则和实践中来自头文件的错误消息+; 我刚刚开始使用编程学习C++:C++的原理和实践。那本书告诉我使用一个头文件为我设置东西。有问题的头文件位于_C++ - Fatal编程技术网

使用C+的原则和实践中来自头文件的错误消息+; 我刚刚开始使用编程学习C++:C++的原理和实践。那本书告诉我使用一个头文件为我设置东西。有问题的头文件位于

使用C+的原则和实践中来自头文件的错误消息+; 我刚刚开始使用编程学习C++:C++的原理和实践。那本书告诉我使用一个头文件为我设置东西。有问题的头文件位于,c++,C++,我正在尝试一个练习,要求我写一个素数筛。我有以下计划: #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&

我正在尝试一个练习,要求我写一个素数筛。我有以下计划:

#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;
}
我已经尽了最大努力在网上找到这个问题的答案,但我就是不明白这条信息告诉我我做错了什么!请有人给我指出正确的方向好吗

谢谢。

(您确定这是您正在编译的代码吗?
max
在哪里声明?)

std::vector
是一种与任何其他
t
std::vector
行为不同的

不幸的是,尽管在您的案例中,
std::vector
似乎是一个明显的选择,但它迫使您处理
std::vector
的奇怪之处,并且它不适用于Stroustrup的
vector
类模板

对该错误的详细解释是,Stroustrup的标题重新定义了
向量
,以引用其
向量
模板,这为元素访问操作符添加了一些范围检查(即
操作符[]
,这是您在说
primes[i]
时使用的一个)。重新定义的
向量
不能用
bool
实例化,因为
std::vector::operator[]
不返回正常引用,而重新定义的
向量
希望它返回正常引用。

(您确定这是您正在编译的代码吗?在哪里声明了
max

std::vector
是一种与任何其他
t
std::vector
行为不同的

不幸的是,尽管在您的案例中,
std::vector
似乎是一个明显的选择,但它迫使您处理
std::vector
的奇怪之处,并且它不适用于Stroustrup的
vector
类模板


对该错误的详细解释是,Stroustrup的标题重新定义了
向量
,以引用其
向量
模板,这为元素访问操作符添加了一些范围检查(即
操作符[]
,这是您在说
primes[i]
时使用的一个)。重新定义的
向量
不能用
bool
实例化,因为
std::vector::operator[]
不返回正常引用,而重新定义的
向量
期望它返回正常引用。

从第一眼看,
bool
的向量似乎是问题所在。不幸的是,向量和bool值不能很好地结合在一起,因为迭代器无法返回
bool&
引用。请参阅以获得相当详细的解释。

从第一眼看,布尔的向量似乎是问题所在。不幸的是,向量和bool值不能很好地结合在一起,因为迭代器无法返回
bool&
引用。请参阅以获得相当详细的解释。

尝试用int向量替换布尔向量?谢谢您的评论。这确实有效,但我发现代码可读性较差。我不应该在这里使用bool类型有什么根本原因吗?有人告诉Stroustrup先生他的头球很烂。:)@JROK,它提供了一个非常特殊的教学C++编程新手的目的,所以他们不需要知道名字空间,或者微软如何定义代码> min <代码>和<代码> max >代码>作为宏或其他的阻碍,为初学者提供了帮助。请参阅这个相关的问题:尝试用int向量替换布尔向量。谢谢评论。这确实有效,但我发现代码可读性较差。我不应该在这里使用bool类型有什么根本原因吗?有人告诉Stroustrup先生他的头球很烂。:)@JROK,它提供了一种非常特殊的教学C++编程新手的目的,所以他们不需要知道名字空间,或者微软如何定义代码> MIN <代码>和<代码> max >代码>作为宏或者其他阻碍初学者的方法。请参阅这个相关的问题:谢谢你在我的问题上扩展乔纳森。我从编辑器中复制了我粘贴的代码,所以我假设你的问题的答案是肯定的,这就是我正在编译的代码——不确定我是否误解了什么。当我学到更多的C++时,我会把这篇文章粉刷一下以供进一步研究,因为我还没有完全理解发生了什么。我很满意地考虑向量现在是我应该避免的:-再次感谢。(对不起,我刚刚意识到你指的是什么,我错贴了我的代码,忘记了<代码> int max;< /Cord>行> algGH)谢谢你扩展我的问题乔纳森。我从编辑器中复制了我粘贴的代码,所以我假设你的问题的答案是肯定的,这就是我正在编译的代码——不确定我是否误解了什么。当我学到更多的C++时,我会把这篇文章粉刷一下以供进一步研究,因为我还没有完全理解发生了什么。我很满意地考虑向量是我现在应该避免的:-再次感谢。(对不起,我刚刚意识到你指的是什么,我误读了我的代码,忘记了<代码> int max;<代码> >行。
~/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);
                                  ^