下面是我的代码,它试图将字符串“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?
答案 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 std
为not 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()的结果赋值给pair
。 pair
没有任何方法可以调用。
pair = string2StringPair(argv[1]);