1. ホーム
  2. c++

[解決済み] 引数1の初期化... [-fpermissive]

2022-02-08 03:14:37

質問

c++の初心者で、ubuntuでeclipse cdtを使用していますが、ヘッダーファイルでこのエラーが発生します。

initializing argument 1 of 'std::map<basic_string<char>,Supplier*> Engine::processSupplierFile(char*)' [-fpermissive]

すでにこのエラーで検索したら、こんなのが出てきました。 C++のコードをコンパイルしようとすると、Eclipseでerror: initializing argument 1 of 'Item::Item(int)' [-fpermissive]が表示されるのはなぜですか?

が、ヘッダーファイルのエラーについては何も回答がありませんでした。

以下は、そのヘッダーファイルのコードです。(Supplierは2つの文字列と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_ */

このエラーの原因をご存知の方はいらっしゃいますか? ありがとうございます。

EDIT (supplier.hを追加)

/*
 * 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_ */

解決方法は?

OK、解決しました。 このエラーは、おそらく実装がconstメソッドにconstでないvarを送信したことが原因です。 変数とメソッドにconstを追加したら、問題は解決しました。