initializing argument 1 of... [-fpermissive]
Ich bin neu in c++ und mit eclipse cdt auf ubuntu installieren und diese Fehlermeldung bekommen in meiner header-Datei:
initializing argument 1 of 'std::map<basic_string<char>,Supplier*> Engine::processSupplierFile(char*)' [-fpermissive]
Ich schon gesucht für diesen Fehler und fand diese:
Warum bin ich immer error: initializing argument 1 of 'Element::Element(int)" [- fpermissive] in Eclipse, wenn ich versuche zu kompilieren mein C++ - code?
aber es didn ' T haben alle Antworten, die über die header-Datei Fehler.
hier ist der code der header-Datei: (Lieferant ist ein einfaches Objekt mit zwei string und double)
#ifndef Engine_H_
#define Engine_H_
#include "Ingredient.h"
#include "Product.h"
#include "Supplier.h"
#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
class Engine {
public:
Engine();
virtual ~Engine();
string fileToString(string fileName);
void processLoggerFile (char* fileName);
string fileToString(char* fileName);
vector<Product> processProductsFile(char* fileName, const map<string, Ingredient> &cheapestIngredients);
map<string, Supplier*> processSuppliersFile(char* fileName); //this line produces the error
map<string, Ingredient> findCheapestPrices(vector<Supplier> &suppliers);
map<string, Product*> createMenu(vector<Product>& products);
void supplierPriceChange(vector<Product>& products, map<string,Product*>& menu,vector<Supplier>& suppliers, map<string, Ingredient> cheapestIngredients, string supName, string ingName, double newPrice);
};
#endif /* Engine_H_ */
Wer weiß, was diesen Fehler verursacht?
vielen Dank im Voraus
BEARBEITEN (Lieferant.h Hinzugefügt)
/*
* Supplier.h
*
* Created on: Nov 10, 2013
* Author: tom
*/
#ifndef SUPPLIER_H_
#define SUPPLIER_H_
#include <string>
using namespace std;
class Supplier {
public:
Supplier();
Supplier(const Supplier& supplier);
Supplier(string supName, string ingName, double price);
Supplier& operator=(const Supplier& supplier);
virtual ~Supplier();
string getSupplierName() const;
string getIngredientName() const;
double getPrice() const;
void setPrice(double price);
private:
string _ingredientName;
string _supplierName;
double _price;
};
#endif /* SUPPLIER_H_ */
- Forward-Deklaration Lieferant sollte hier genügen. Ich denke, es ist eine zirkuläre Abhängigkeit Problem. Sie sollten entfernen Sie alle Codes, die nicht im Zusammenhang mit dem Thema, aber die erforderlichen bits zu rekonstruieren: Was ist ein
Supplier
? - u r right, krank hinzufügen.
- vermutlich
Supplier
deklariert istSupplier.h
. - Ja, und das ist hilfreich, auf welche Weise? Ich sehe nicht
Supplier.h
. Der Fehler dort sein könnte. - Zwei Dinge über Ihre header-Dateien: Sie reservierte Bezeichner (starten Sie den Daten-Feldnamen mit einem Unterstrich beginnen, sind Sie nicht berechtigt, das zu tun). Zweitens, werden Sie nicht verwenden
using namespace std
im header-Dateien. - ich verwendete Unterstriche und using namespace in viele andere Dateien und nicht keine Fehler bekommen..
- es ist relevant, denn wenn
Supplier
waren nicht deklariert der compiler würde sich beschweren, dass "'Lieferant' wurde nicht deklariert" sondern als die "initializing argument 1" Fehler. - Tatsächlich, diese sind legal. Namen beginnen mit einem Unterstrich, gefolgt von einem Kleinbuchstaben reserviert sind, im globalen Bereich nur. So wie die Namen, Sie sind in Ordnung.
- in der Regel die "initializing argument 1 von" Fehler zusammen mit anderen Fehlern - das sollten Sie zeigen, als auch diejenigen, die in Ihrer Frage (zusammen mit dem code, auf die Sie verweisen). Ich vermute, das eigentliche problem ist an der Stelle, wo Sie versuchen, zu nennen
processSuppliersFile()
- Es ist irrelevant, ohne zu sehen, die eigentliche Erklärung. Warum? Denn jetzt sehen wir es, es ist nicht standard-konformen code. Das könnte das Problem sein. "Beim Debuggen, denken Sie wie ein compiler"
- Angew Oh, wusste nicht, dass. Vielen Dank für den Hinweis.
- sehen diese SO Artikel für details über die Probleme, die stefan erwähnt: stackoverflow.com/questions/228783/... und stackoverflow.com/questions/4872373/..., Die sagte, ich glaube nicht, dass mögliche Probleme haben nichts mit dem problem zu tun, die in Ihrer Frage.
- Es ist schwer zu erkennen, dass die wahre Ursache der Probleme hier. Bitte reduzieren Sie Ihre code, um die minimale code-Beispiel, das bewirkt, dass die exakte gleiche Problem. Auch stellen Sie sicher, dass es der erste Fehler mit dem compiler-Ausgänge (E. g. für g++ verwenden
-Wfatal-errors
) processSuppliersFile
ist nicht das gleiche wieprocessSupplierFile
du bist also nicht die Entsendung der wirkliche Fehler oder Buchung nicht den richtigen code. Und poste die ganze Fehlermeldung; es kann über zwei oder mehr Zeilen.- ich tippte den Fehler manuell. das ist wahrscheinlich ein Tippfehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich habe es gelöst.
Dieser Fehler ist wahrscheinlich verursacht durch die Umsetzung der an eine nicht const var zu einer const-Methode.
ich habe ein const, um die variable und die Methode und das problem war gelöst.