我是一名c ++ 11学生,我遇到额外的资格错误。
我有一个在.h文件中声明的类和一个单独的.cpp文件中的布尔函数的实现。
类定义如下:
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类中的所有内容。
.h的顶部是:
#pragma once
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include "util.h"
答案 0 :(得分:0)
你班上有这一行:
void print(){
我相信你的意思
void print();
由于C ++编译的方式,当你说#include "order.h"
时,编译器实际上是将order.h的内容复制并粘贴到你的cpp文件中。所以它看到你已经为print打开了这个函数定义,并在你的成员函数print(gcc扩展名)中声明了一些局部函数,然后你最终在标记为};//class Order
的行中关闭了该函数。这看起来像是类定义的结束,但它实际上是你函数的结束。稍后在cpp文件中的函数定义被视为在类体内部,这会使编译器感到困惑。