Я студент 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 в отдельном пространстве имен, и я включил только соответствующий файл .h для файла cpp. Может кто-нибудь дать мне небольшой толчок в том направлении, на которое мне нужно обратить внимание, чтобы решить эту проблему?
Спасибо
Это вершина файла 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"
У вас есть эта строка в вашем классе:
void print(){
Я полагаю, ты имел в виду
void print();
Из-за способа компиляции C ++, когда вы говорите #include "order.h"
компилятор буквально копирует и вставляет содержимое order.h в ваш файл cpp. Таким образом, он видит, что вы открыли это определение функции для печати и объявили некоторые локальные функции внутри функции-члена print (расширение gcc), а затем в конце концов закройте функцию в строке, помеченной };//class Order
, Это выглядит как конец определения класса, но на самом деле это конец вашей функции. Позже определения функций, которые находятся в вашем файле cpp, рассматриваются как находящиеся внутри тела класса, что приводит в замешательство компилятор.
Других решений пока нет …