>source

따라서 나의 목표는이 벡터vector 'Beer'allBeers를 함수UnitedStatesBeer :: getBeerTop ()에 전달하는 것입니다.하지만 그렇게하려고하면 함수 호출에 인수가 너무 많거나 객체가 초기화되지 않았다는 오류가 발생했습니다.

이 문제를 어떻게 해결합니까? 도와 주셔서 감사합니다!

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;
class RatingCalculator
{
public:
     virtual void showCountryTop() = 0;
     virtual void getCountryTop() {};
};
class Beer
{
public:
    string name;
    string rating;
    string country;
    string alc;
    string type;
};
class UnitedStatesBeer : public RatingCalculator
{
private:
    string name;
    string rating;
    string country;
    string alc;
    string type;
public:
    void showCountryTop() {};
    void getCountryTop(vector<Beer> allBeers){};
int main()
{
        ifstream file("beer.txt");
        Beer currentBeer;
        vector<Beer> allBeers;
        for (int i = 0; !file.eof(); i++)
        {
            getline(file, currentBeer.name, '\t');
            getline(file, currentBeer.rating, '\t');
            getline(file, currentBeer.country, '\t');
            getline(file, currentBeer.alc, '\t');
            getline(file, currentBeer.type, '\n');
            allBeers.push_back(currentBeer);    //copy all the information to allBeers vector 
        }
        file.close();
        /*if I do it this way*/
        UnitedStatesBeer UsReassign;          
        UsReassign->getCountryTop(allBeers);   //<- expression (UsReassign) must have pointer type/ Using uninitialized memory
    //  RatingCalculator* UsReassign = new UnitedStatesBeer();
    //  UsReassign-> getCountryTop(allBeers);  //<- too many arguments in function call

    }


  • 답변 # 1

    먼저 가상 함수를 재정의하고 싶기 때문에 기본 클래스 (일명 RatingCalculator )의 함수 정의를 일치 시키려고합니다.   UnitedStatesBeer 에있는 것과 . 이것이 RatingCalculator 에서 어떻게 보일지입니다.  :

     virtual void getCountryTop(vector<Beer> allBeers) {};
    
    

    UnitedStatesBeer

    void getCountryTop(vector<Beer> allBeers){};
    
    

    두 번째로, 최고 맥주를 원하기 때문에 & 를 추가하여 참조로 전달할 수 있습니다.  변수 beers 앞에서 .

    셋째, 와이즈 비즈 UsReassign이 포인터가 아닌 개체이기 때문에 이런 일이 발생합니다. 객체는 UsReassign->getCountryTop(allBeers); //<- expression (UsReassign) must have pointer type/ Using uninitialized memory.. 로 참조됩니다   . 대신 .

    그리고 마지막으로 와이즈 비즈 함수 -> 때문에 발생합니다  인수없이 호출됩니다. "첫 번째"에 언급 된 단계로 해결해야합니다.

    // UsReassign-> getCountryTop(allBeers); //<- too many arguments in function call

관련 자료

  • 이전 python - 100 개의 그리드 맵을 어떻게 생성 할 수 있습니까?
  • 다음 python - 최대 루프 수의 for-loop 코드를 멀티 스레딩 코드로 전환