请问这个头文件有啥问题,编译总是无法通过

时间:2021-10-31 13:15:16
RT

#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;

#3


楼上的说的对

#4


也可以不必。

在cpp里加也行。

呵呵


另外也可以用#pragma once


引用 2 楼  的回复:
而且需要包含头文件.
所以要加上下面的: 
#include<vector>
#include<string>
using namespace std;

#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;

#3


楼上的说的对

#4


也可以不必。

在cpp里加也行。

呵呵


另外也可以用#pragma once


引用 2 楼  的回复:
而且需要包含头文件.
所以要加上下面的: 
#include<vector>
#include<string>
using namespace std;

#5


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。