C ++ String - 超出范围错误

时间:2014-02-18 13:27:09

标签: c++ string

我正试图在我正在编写的Hangman程序中使用Strings,并且无法让它们工作,因此尝试在更简单的基础上与它们合作并且我仍然没有运气。

至于我在参考文献中在线阅读以及其他人所说的这段代码应该有效:

#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

int main (int argc, char** argv){

  string word = {"Hello"};
  int length = strlen(word);

}

但是我得到了这个编译错误:

'string'未在此范围内声明

因此,'word'也未在范围内声明。

谁能看到我做错了什么?我在Ubuntu上使用g ++编译器,如果这有所不同,不知道哪个版本。

5 个答案:

答案 0 :(得分:7)

您对C和C ++感到困惑。

您只包含C库,而std::string来自C ++标头string。你必须写:

#include <string>

使用它。但是,您必须进行其他更改,例如不使用strlen

你应该学习你的C ++书籍,而不是互联网上的随机帖子( #lolirony


C版

#include <string.h>

int main(void)
{
  const char* word    = "Hello";
  const size_t length = strlen(word);  // `size_t` is more appropriate than `int`

  return 0;
}

C-like C ++版

#include <cstring>
using namespace std;

int main()
{
  const char* word    = "Hello";
  const size_t length = strlen(word);
}

Idiomatic C ++版本(推荐)

#include <string>

int main()
{
  const std::string word   = "Hello";
  const std::size_t length = word.size();
}

答案 1 :(得分:4)

  

'string'未在此范围内声明

您需要添加标题<string>并将其称为std::string。此外,strlen无法理解std::string或任何用户定义的类型,但您可以使用size()方法:

#include <string>

int main()
{
  std::string word = "Hello";
  size_t length = word.size();
}

答案 2 :(得分:1)

<cstring>是C语言空终止字符串的C ++支持的标头。您应该包含<string>

答案 3 :(得分:1)

您尚未在项目中包含C ++字符串标题。

#include <string>

您包含的库都是普通C标头。

此外,strlen()不适用于c ++字符串;你应该使用word.size()代替。

答案 4 :(得分:0)

string是标准类std::basic_string的特化。它在标题<string>

中声明

因此,如果你想“使用标准类std :: string:”,你需要包含指令

#include <string>

标题<cstring>与标题<string>不同,并且包含标准C函数的声明,例如strlen

然而,将函数strlen应用于std::string类型的对象没有任何意义。在这种情况下,编译器将发出错误。

我建议您使用以下代码来查看差异

#include <iostream>
#include <string>
#include <cstring>

int main (int argc, char** argv)
{

   std::string word = "Hello";
   std::string::size_type length = word.length();

   std::cout << "Object word of type std::string has value "
             << word << " with length of " << length
             << std::endl;
   std::cout << "The size of the object itself is " << sizeof( word ) << std::endl; 

   char another_word[] = "Hello";
   size_t another_length = std::strlen( another_word );

   std::cout << "Object another_word of type char [6] has value "
             << another_word << " with length of " << another_length
             << std::endl;
   std::cout << "The size of the object itself is " << sizeof( another_word ) << std::endl; 
}