Как избавится от ошибки с переменными char

229
30 марта 2017, 19:11

Смысл в программе в том что она должна вывести на консоль 4 значения: Potatos, Tomatos, Apple, Orange. Но вместо этого выводит предупреждение [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]. В итоге выводит на экран знаки вопроса. Также еще вопрос на счет того что прописывать в скобках: Storage a = Storage(); В Java я писал: GoodIntrf a=new Fruit();

GoodIntrf.h

class GoodIntrf {
public:
    virtual char GetName (int id) = 0; 
};

Fruit.h

#include "GoodIntrf.h"
class Fruit : public GoodIntrf
{
public:
    char* getName(int id) {
        if (id == 1) return "Apple";
        if (id == 2) return "Orange";
        else return "Unknown type";
    }
};

Vegetable.h

#include "GoodIntrf.h"
class Vegetable : public GoodIntrf
{
public:
    char* getName(int id) {
        if (id == 1) return "Potato";
        if (id == 2) return "Tomato";
        else return "Unknown type";
    }
};

main.cpp

#include <iostream>
#include <string>
#include "Fruit.h"
#include "Vegetable.h"
#include "GoodIntrf.h"
class Storage : public GoodIntrf
{
public:
    char GetName(int id) {
        return id;
    }
};
int main(int argc, char** argv) {
    Storage a = Storage();
    std::cout << a.GetName(1) << std::endl;
    std::cout << a.GetName(2) << std::endl;
    Storage a = Storage();
    std::cout << a.GetName(1) << std::endl;
    std::cout << a.GetName(2) << std::endl;
    system("pause");
}
Answer 1

Прекратите возвращать char * из функций, возвращающий указатели на строковые литералы. В С++ строковые литерал имеет тип const char [N] и, соответственно, приводится к указателю const char *, а не char *. Исправляйте все типы возврата на const char *.

Отдельно неясно, почему эти функции вообще являются членами каких-то классов. Они же со своим классом вообще никак не общаются. Что за странные функции с именами, отличающимися только капитализацией: GetName и getName. В чем замысел? Почему вдруг Storage::GetName возвращает char? Причем здесь вообще классы Vegetable и Fruit, если в программе они никак не используются?

Что касается того "что прописывать в скобках" - об этом пока рано говорить, ибо совершенно не ясно, что вы пытаетесь сделать.

READ ALSO
Перевод hex в код символа

Перевод hex в код символа

У меня есть переменная типа String, в которой лежит следующее значение: "0xF9"Как мне получить выходной символ, код которого равен hex значению в этой...

338
Нужно построить график с датами&amp;

Нужно построить график с датами&

Доброго времени сутокЯ в приложении использую GraphView для построения графика

186
Что значит &ldquo;на стероидах&rdquo;?

Что значит “на стероидах”?

Что значит "на стероидах" в рамках программирования?

235