0

下面是我的代码,它试图将字符串“key=value”分成两个子数组“key”和“value”,错误如下:

string2StringPair.cc:9:3: 错误:'std' 没有命名类型;string2StringPair.cc:10:3: 错误:'std' 没有命名类型;string2StringPair.cc:13:12:错误:“string2StringPair”之前的预期初始化程序

#ifndef __PARSE_H_
#define __PARSE_H_

#include "cppstd.hh"
#include <string>
using namespace std;

struct StringPair{
  std:string key; 
  std:string value;
}

StringPair string2StringPair (char* str[]){
  std:string x, y;
  x = ""; y = "";
  for (int i=0;i<str.length();i++){
    if str[i]=="="{
        for (int j=0;j<i;j++){
      x=x+str[j];
    }
        for (int k=(i+1);k<str.length();k++){
      y=y+str[k];
    }
        break; 
    }
  }
  if ((x=="") && (y=="")){
    cout<<"ERROR: There is no = in the input string!"<<endl;
  }

  StringPair tmp;
  tmp.key = x; 
  tmp.value = y;
  return tmp;
} 

#endif

int main(int argc, char *argv[]){
  StringPair pair;
  pair.string2StringPair(argv[1]);
  cout<<"The pair is "<<pair<<endl;
  return 0;
}

如果您能帮我解决错误,我将不胜感激。

当我改为

std::string key; 
std::string value;

没有更多的“std”错误。为什么??

为什么在 string2StringPair 之前需要一个初始化程序?我虽然我已经有一个:StringPair?

4

4 回答 4

4

你错过了这个:

std::代替std:

编辑

当我改为

std::string 键;标准::字符串值;没有更多的“std”错误。为什么??

:因为根据 C++ 标准中规则的:定义,C++ 编译器需要另一个编译器。scope resolution

于 2013-11-10T19:06:22.607 回答
2

命名空间和后面的分隔符是 C++ 中的两个冒号字符。

因此,您需要以下内容:

std::string key;

或者,既然您说的是using namespace std,您实际上可以完全省略std::前缀。但是,using namespace std被认为是良好的编码习惯

长话短说:删除using namespace std;and 使用std::前缀。

此外,对于包含警卫,不要使用带有双下划线(甚至是单下划线)的标识符。在 C++ 标准中保留标识符中的前导下划线有相当严格的规则。虽然您可能会在使用它们时逃脱,但绝对不推荐。

只需使用

#ifndef PARSE_H
#define PARSE_H
于 2013-11-10T19:06:39.073 回答
1

有许多错误。

您需要std在使用它的位置后使用两个冒号。

struct声明后面需要跟一个分号。

struct StringPair {
    std::string key;
    std::string value;
};  // <-- add semi-colon here

您打算std::string用作 string2StringPair() 的输入,因为您str在该函数中使用类似对象。

StringPair string2StringPair (std::string str){

你需要使用str.size()来获取字符串的长度,而字符比较使用单引号,而不是双引号。

for (int i=0 ; i< str.size();i++){  // use str.size() 
    if(str[i] == '=') {          // "=" is a string.  '=' is a single character.

在您的 main() 函数中,您打算将 string2StringPair() 的结果分配给pair. pair没有任何方法可以调用。

pair = string2StringPair(argv[1]);
于 2013-11-10T19:26:00.383 回答
1

标准::而不是标准://note :: is two times.

如果您使用命名空间 std,则无论如何都不需要使用“std::”。选择一种编程约定。

至于您编辑的问题,为什么在使用:: 之后没有更多错误,

"::" 用于访问类/结构或命名空间的静态变量和方法。它也常用于从另一个作用域访问变量和函数。复习 C++ 的基础知识,否则越进步越难。

于 2013-11-10T19:07:44.943 回答