命名空间中包含头文件报错

这样的代码是正确的:

namespace cplusplus_primer {
    class Sales_data { /*...*/ };
    Sales_data operator+(const Sales_data&, const Sales_data&);
    class Query {};
    class Query_base {};
}

#include 
#include 

int main()
{
    cplusplus_primer::Sales_data book;  // 使用了命名空间
    std::string str("hello");  // 使用了 std 命名空间
    std::cout << str << std::endl;
    return 0;
}

但我把这些文件放在命名空间中为何就是错的呢?

namespace cplusplus_primer {
#include 
#include 
    class Sales_data { /*...*/ };
    Sales_data operator+(const Sales_data&, const Sales_data&);
    class Query {};
    class Query_base {};
}

//#include 
//#include 

int main()
{
    cplusplus_primer::Sales_data book;  // 使用了命名空间
    cplusplus_primer::std::string str("hello");  // 使用了 std 命名空间
    cplusplus_primer::std::cout << str << cplusplus_primer::std::endl;
    return 0;
}

有人知道这其中原因么

报什么错呢?

#include 应该放在命名空间之外吧,还有cplusplus_primer::std,std是一个已经在全局命名空间中存在的,他没被包含在cplusplus_primer里,应该在全局作用域中使用 std 命名空间吧

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1095300
  • 你也可以参考下这篇文章:上传文件到项目中,解决文件重复文件,并且将路径存储到数据库中
  • 同时,你还可以查看手册:c语言-查找与命名空间 中的内容
  • 除此之外, 这篇博客: 使用正则表达式将文本文件中指定字符删除或替换中的 使用正则表达式将文本文件中指定字符删除或替换 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 举例:例如将日志中所有的时间都去掉,并且去掉行尾是(RetVal:0)的行或者是替换成GO

    re模块 常用的方法:
    compile(pattern, flags = 0) 匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象

    match(pattern, string, flags = 0) 使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配成功,返回匹配对象,否则返回None

    search(pattern, string ,flags = 0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象,否则返回None

    findall(pattern, string[,flags] ) 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表

    finditer(pattern, string[,flags] ) 与findall()相同,但返回的是一个迭代器。对于每一次匹配,迭代器都能返回一个匹配对象

    split(pattern, string, max = 0) 根据正则表达式的模式分隔符,split函数将字符串分割为列表,返回匹配列表,分割最多操作max次

    group(num = 0) 返回整个匹配对象,或者编号为num的特定子组

    re.sub(pattern,repl,string,count,flags)
    pattern:正则表达式中的模式字符串;rep原来字符串中要换的东西(既可以是字符串,也可以是函数);string:要被处理的,要被替换的字符串;count:匹配的次数,最多的次数flages:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等等
    strip() strip()并不是一个真正意义上的替换函数,它是用来删除一些字符的,所以我们可以把这看作是把字符串中的一些字符替换成空

    import re
    
    class ReplaceStr:
        def __init__(self,path):#path :文本路径
            self.path=path
    
    
        #先将需要修改的语句提取出来,如果没有匹配到则不修改(实际上是将文件中所有数据读出来,再重新写入)提取匹配到的字符串
        def get_lines_sub(self,regex):#使用正则表达式匹配
            f1 = open(self.path, encoding='GB18030')
            line_list = f1.readlines()
            length=len(line_list)
            f2 = open(self.path, 'w+', encoding='GB18030')
            n=0
            for line in line_list:
                list2 = re.findall(regex, line)
                if list2:
                    f2.write(line)
                else:
                    n+=1
            if n==length:
                for line in line_list:
                    f2.write(line)
    
            f1.close()
            f2.close()
    
        def get_lines_str(self,str):#使用字符串匹配
            f1 = open(self.path, encoding='GB18030')
            line_list = f1.readlines()
            length=len(line_list)
            f2 = open(self.path, 'w+', encoding='GB18030')
            n=0
            for line in line_list:
                if str in line:
                    f2.write(line)
                else:
                    n+=1
            if n==length:
                for line in line_list:
                    f2.write(line)
    
            f1.close()
            f2.close()
    
        #替换文本中符合条件的字符
        def replace_str(self,regex,newstr=''):#regex :要替换的字符串,可以是正则表达式,newstr :替换后的字符串,默认为空
            # path = input('请输入文本路径:')
            # regex = input('请输入要替换的字符串,可以是正则表达式:')
            # newstr = input('请输入要替换后的字符串,不输入视为空:')
    
            f1=open(self.path,encoding='GB18030')
            line_list=f1.readlines()
            f2=open(self.path,'w+',encoding='GB18030')
    
            for s_line in line_list:
                tt=re.sub(regex,newstr,s_line)
                print(tt)
                f2.write(tt)
            f1.close()
            f2.close()
    
        #将正则表达式匹配到的字符所在行替换为其他字符
        def replace_line(self,regex,str): #输入两个参数,regex:要匹配的正则表达式 str:要替换的字符串
            list1=[]
            f1 = open(self.path, encoding='GB18030')
            line_list = f1.readlines()
            f2 = open(self.path, 'w+', encoding='GB18030')
            for s_line in line_list:
                list2=re.findall(regex,s_line)
                if list2:
                    list1.append(str)
                else:
                    list1.append(s_line)
    
            for line in list1:
                f2.write(line)
    
            f1.close()
            f2.close()
            
    if __name__ == '__main__':
        st = ReplaceStr(r'F:\KBaseserver备份\实时更新发布压力测试\日志\Kbase日志\205.1_1220.txt')
        a = st.replace_line('\s\s\(RetVal:0\)','GO\n')
        a = st.replace_str('(\d{4})-(\d{2})-(\d{2}),(\d{2}):(\d{2}):(\d{2})\s\[Message\]\s', '')
    
    
  • 您还可以看一下 AI100讲师老师的朋友圈爆款背后的计算机视觉技术与应用课程中的 朋友圈爆款背后的计算机视觉技术与应用小节, 巩固相关知识点