gpt4 book ai didi

c++ - c++11 编译器中出现额外限定错误的问题

转载 作者:行者123 更新时间:2023-12-03 12:50:15 25 4
gpt4 key购买 nike

我是一名 c++11 学生,我遇到了额外的限定错误。

我在 .h 文件中声明了一个类,并在单独的 .cpp 文件中实现了 bool 函数。

类定义如下:

class Order{
std::string customer, product;
std::vector<std::string> itemList;

bool validName(std::string name);
bool isCustomerName(std::string name);
bool isProductName(std::string name);
bool isItemName(std::string name);

public:

Order(std::vector<std::string> line);
void print(){
void graph(std::ofstream os);
};//class Order

所有函数都在单独的 cpp 文件中实现,并且我按以下方式确定了所有函数的范围:

Order::Order(std::vector<std::string> line){

bool Order::isCustomerName(std::string name){

当我尝试编译cpp文件时,出现此错误:

error: extra qualification ‘Order::’ on member ‘Order’ [-fpermissive]

查找后,这似乎是与在同一函数的类定义中使用作用域运算符或某种作用域运算符的双重使用相关的错误。

我没有将 cpp 文件中的实现封装在单独的命名空间中,并且只包含了 cpp 文件相应的 .h 文件。有人可以给我一点插入力,让我朝着解决这个问题所需的方向前进吗?

谢谢

<小时/>

这是 cpp 文件的顶部:

#include <fstream> 
#include <iostream>
#include <vector>
#include <string>
#include "order.h"

这是来自同一 cpp 的示例函数:

bool Order::isProductName(std::string name){ 
if (name.size() > 0 && isalpha(name[0]))
return true;
return false; }

上面列出的类定义实际上是 .h 中类 Order 的所有内容。

.h 的顶部是:

#pragma once 
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include "util.h"

最佳答案

你的类(class)中有这样一行:

 void print(){

我相信你的意思是

 void print();

由于 C++ 的编译方式,当您说 #include "order.h" 时,编译器实际上是将 order.h 的内容复制并粘贴到您的 cpp 文件中。因此它看到您已经打开了这个 print 函数定义,并在成员函数 print (gcc 扩展)中声明了一些本地函数,然后您最终在标记为 };//class 的行处关闭了该函数订单。这看起来像是类定义的结束,但实际上是函数的结束。稍后在 cpp 文件中的函数定义被视为位于类主体内,这会使编译器感到困惑。

关于c++ - c++11 编译器中出现额外限定错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38817253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com