Возникли проблемы с дополнительной ошибкой квалификации в компиляторе c ++ 11

Я студент 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"

0

Решение

У вас есть эта строка в вашем классе:

 void print(){

Я полагаю, ты имел в виду

 void print();

Из-за способа компиляции C ++, когда вы говорите #include "order.h" компилятор буквально копирует и вставляет содержимое order.h в ваш файл cpp. Таким образом, он видит, что вы открыли это определение функции для печати и объявили некоторые локальные функции внутри функции-члена print (расширение gcc), а затем в конце концов закройте функцию в строке, помеченной };//class Order, Это выглядит как конец определения класса, но на самом деле это конец вашей функции. Позже определения функций, которые находятся в вашем файле cpp, рассматриваются как находящиеся внутри тела класса, что приводит в замешательство компилятор.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]