'std'没有在函数之前命名类型和期望的初始值设定项

时间:2013-11-10 19:04:23

标签: c++ string associative

下面是我的代码,它试图将字符串“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;

没有更多“标准”错误。为什么?

为什么在string2StringPair之前需要初始值设定项?我虽然已经有一个:StringPair?

4 个答案:

答案 0 :(得分:4)

你错过了这个:

std::代替std:

修改

  

当我改为

时      

std :: string key; std :: string value;没有更多的“标准”错误。   为什么?

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

答案 1 :(得分:2)

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

所以,你需要以下内容:

std::string key;

或者,既然你说using namespace std,你实际上可以完全省略std::前缀。但是,using namespace stdnot considered good coding practice

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

此外,对于包含保护,请勿使用带有双下划线(或甚至单个下划线)的标识符。关于在C ++标准中保留的标识符中引入下划线的规则非常严格。虽然你在使用它们时可能会离开,但绝对不值得推荐。

只需使用

#ifndef PARSE_H
#define PARSE_H

答案 2 :(得分:1)

std ::而不是std://note :: is two times.

如果您使用的是命名空间std,则无需使用“std ::”。选择一种编程惯例。

关于你编辑过的问题,在使用::,

之后,没有更多错误的原因

“::”用于访问类/结构或命名空间的静态变量和方法。它也常用于从另一个范围访问变量和函数。了解C ++的基础知识,否则进展得越多就越难。

答案 3 :(得分: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()的结果赋值给pairpair没有任何方法可以调用。

pair = string2StringPair(argv[1]);