#ifndef __SPLIT_H_
#define __SPLIT_H_
#endif //__SPLIT_H_
void StringSplit(string s,char splitchar,vector<string>& vec)
{
if(vec.size()>0)//保证vec是空的
vec.clear();
int length = s.length();
int start=0;
for(int i=0;i<length;i++)
{
if(s[i] == splitchar && i == 0)//第一个就遇到分割符
{
start += 1;
}
else if(s[i] == splitchar)
{
vec.push_back(s.substr(start,i - start));
start = i+1;
}
else if(i == length-1)//到达尾部
{
vec.push_back(s.substr(start,i+1 - start));
}
}
}
报错内容
In file included from a.cpp:24:
split.h:23: error: variable or field `StringSplit' declared void
split.h:23: error: `string' was not declared in this scope
split.h:23: error: expected primary-expression before "char"
split.h:23: error: `vector' was not declared in this scope
split.h:23: error: `string' was not declared in this scope
split.h:23: error: `vec' was not declared in this scope
split.h:24: error: initializer expression list treated as compound expression
split.h:24: error: expected `,' or `;' before '{' token
5 个解决方案
#1
#endif应该放在文件尾部.修改如下:
#ifndef __SPLIT_H_
#define __SPLIT_H_
void StringSplit(string s,char splitchar,vector<string>& vec)
{
if(vec.size()>0)//保证vec是空的
vec.clear();
int length = s.length();
int start=0;
for(int i=0;i<length;i++)
{
if(s[i] == splitchar && i == 0)//第一个就遇到分割符
{
start += 1;
}
else if(s[i] == splitchar)
{
vec.push_back(s.substr(start,i - start));
start = i+1;
}
else if(i == length-1)//到达尾部
{
vec.push_back(s.substr(start,i+1 - start));
}
}
}
#endif //__SPLIT_H_
#2
而且需要包含头文件.
所以要加上下面的:
#include<vector>
#include<string>
using namespace std;
所以要加上下面的:
#include<vector>
#include<string>
using namespace std;
#3
楼上的说的对
#4
也可以不必。
在cpp里加也行。
呵呵
另外也可以用#pragma once
在cpp里加也行。
呵呵
另外也可以用#pragma once
#5
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
#1
#endif应该放在文件尾部.修改如下:
#ifndef __SPLIT_H_
#define __SPLIT_H_
void StringSplit(string s,char splitchar,vector<string>& vec)
{
if(vec.size()>0)//保证vec是空的
vec.clear();
int length = s.length();
int start=0;
for(int i=0;i<length;i++)
{
if(s[i] == splitchar && i == 0)//第一个就遇到分割符
{
start += 1;
}
else if(s[i] == splitchar)
{
vec.push_back(s.substr(start,i - start));
start = i+1;
}
else if(i == length-1)//到达尾部
{
vec.push_back(s.substr(start,i+1 - start));
}
}
}
#endif //__SPLIT_H_
#2
而且需要包含头文件.
所以要加上下面的:
#include<vector>
#include<string>
using namespace std;
所以要加上下面的:
#include<vector>
#include<string>
using namespace std;
#3
楼上的说的对
#4
也可以不必。
在cpp里加也行。
呵呵
另外也可以用#pragma once
在cpp里加也行。
呵呵
另外也可以用#pragma once
#5
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。