Ошибка перегруженной функции C ++ Visual Studio: ни один экземпляр перегруженной функции не соответствует указанному типу - PullRequest
0 голосов
/ 01 июля 2018

РАЗЪЯСНЕНИЯ:

Этот проект выполняется в Visual Studio с использованием файла stdafx.h.

FText - псевдоним для строки, как установлено в файле stdafx.h:

#include <string>

using FText = std::string;
using int32 = int;

stdafx.h включен в класс View.cpp.

ОРИГИНАЛЬНЫЙ ВОПРОС:

Итак, я пытаюсь создать несколько методов печати, которые печатают строку на основе одного или двух параметров: числовой параметр, который указывает, какое сообщение печатать, и ввод, который будет использоваться в сообщении. На данный момент у меня есть три экземпляра метода «печать», как показано ниже:

///A method that prints a message
//give it a number to tell it what message to print.
void Display::print(int message)
{

    switch (message)
    {
        case 0:
            std::cout << "Welcome to Cows and Bulls, a simple word-guessing game. \n";

            break;
        case 1:
            //(I omitted most of the messages to save space)
            break;
        default:
            std::cout << "Something has gone horribly wrong. \n";
            std::cout << "Goodbye. \n";
            throw std::exception();
    }


}

//messages with one int parameter
void Display::print(int message, int param)
{

    switch (message)
    {
        case 0:

            break;
        default:
            std::cout << "Something has gone horribly wrong. \n";
            std::cout << "Goodbye. \n";
            throw std::exception();
    }

}

//messages with one string parameter
void Display::print(int message, FText param)
{

    switch (message)
    {
    case 0:

        break;
    default:
        std::cout << "Something has gone horribly wrong. \n";
        std::cout << "Goodbye. \n";
        throw std::exception();
    }

}

Я еще не добавил никаких сообщений ко второй и третьей перегрузке, но я доберусь до этого.

Объявление класса в заголовочном файле для части представления программы выглядит следующим образом:

#pragma once

//The method that prints thing to the screen



class Display
{

    public:

        void print(int message);

        //print a message with a parameter other than the message being selected

        void print(int message, int param);

        void print(int message, FText param);

};

Первые два экземпляра метода печати работают нормально, но третий (тот, у которого в качестве параметра указана строка / FText) выдает мне следующую ошибку:

"no instance of overloaded function "CowsAndBulls::Display::print" matches the specified type"

Чтобы добавить немного дополнительной ясности, код все еще компилируется, и я еще не использовал эту функцию: я получаю сообщение об ошибке в определении этой версии печати. ​​

Я совершенно уверен, что мне просто не хватает чего-то простого, но быстрый поиск по вопросам переполнения стека не смог принести мне другую проблему с точно такими же обстоятельствами, как это (или, возможно, я просто не смог распознать другой пост как такая же проблема?)

в любом случае, любая помощь приветствуется.

1 Ответ

0 голосов
/ 01 июля 2018

Хорошо, похоже, я забыл включить stdafx.h в заголовочный файл класса View. Хотя stdafx.h (и, соответственно, FText) был включен в файл cpp, заголовочный файл явно не знал, что это такое. Это меня оттолкнуло, потому что ошибка отображалась в файле cpp.

Для дальнейшего использования, кто-нибудь знает, почему это так?

...