Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Что значат ошибки


Автор: kolesnle 30.3.2013, 19:35
Код

//..........

struct Symbool;

Symbool simbs[5] = {{sum, false, '+','\0'}, {sub, false, '-', '\0'},
                   {mult, false, '*', '\0'}, {div, false, '/','\0'},
                                     {fir, true, '(',')'}};

struct Symbool
{
    PriorityInt (*action)(const string&);
    bool haveEnd;
    char begin;
    char end;
};

выводит 2 ошибки
Код

Код

C:\straustrup\my\calc\main.cpp|20|error: elements of array 'Symbool simbs [5]' have incomplete type|
C:\straustrup\my\calc\main.cpp|20|error: storage size of 'simbs' isn't known|


Автор: Crafty 30.3.2013, 20:02
Код

//..........
struct Symbool // Структура должна быть объявлена до массива структур
{
    PriorityInt (*action)(const string&);
    bool haveEnd;
    char begin;
    char end;
};
Symbool simbs[5] = {{sum, false, '+','\0'}, {sub, false, '-', '\0'},
                   {mult, false, '*', '\0'}, {div, false, '/','\0'},
                                     {fir, true, '(',')'}};


Автор: kolesnle 30.3.2013, 20:05
Так она вроде объявлена 
Цитата(kolesnle @  30.3.2013,  19:35 Найти цитируемый пост)
struct Symbool;

Не?

Автор: Crafty 30.3.2013, 20:12
Цитата(kolesnle @  30.3.2013,  20:05 Найти цитируемый пост)
Так она вроде объявлена 
Цитата(kolesnle @  30.3.2013,  19:35 Найти цитируемый пост)
struct Symbool;

Не?


Ради интереса закомменть свой массив, и посмотри что напишет компилятор.
Код

//..........
struct Symbool;
/*Symbool simbs[5] = {{sum, false, '+','\0'}, {sub, false, '-', '\0'},
                   {mult, false, '*', '\0'}, {div, false, '/','\0'},
                                     {fir, true, '(',')'}};*/
struct Symbool
{
    PriorityInt (*action)(const string&);
    bool haveEnd;
    char begin;
    char end;
};

Автор: kolesnle 30.3.2013, 20:21
И что это поможет узнать? То что ошибка в массиве? Компилятор ничего не написал

Добавлено @ 20:25
Если переместить в верх - пишет:
Код

C:\straustrup\my\calc\main.cpp|10|error: expected identifier before '*' token|
C:\straustrup\my\calc\main.cpp|10|error: ISO C++ forbids declaration of 'PriorityInt' with no type [-fpermissive]|
C:\straustrup\my\calc\main.cpp|10|error: 'PriorityInt' declared as function returning a function|
C:\straustrup\my\calc\main.cpp|27|error: too many initializers for 'Symbool'|
C:\straustrup\my\calc\main.cpp|27|error: too many initializers for 'Symbool'|
C:\straustrup\my\calc\main.cpp|27|error: too many initializers for 'Symbool'|
C:\straustrup\my\calc\main.cpp|27|error: too many initializers for 'Symbool'|
C:\straustrup\my\calc\main.cpp|27|error: too many initializers for 'Symbool'|
C:\straustrup\my\calc\main.cpp|27|warning: the address of 'PriorityInt sum(const string&)' will always evaluate as 'true' [-Waddress]|
C:\straustrup\my\calc\main.cpp|27|warning: the address of 'PriorityInt sub(const string&)' will always evaluate as 'true' [-Waddress]|
C:\straustrup\my\calc\main.cpp|27|warning: the address of 'PriorityInt mult(const string&)' will always evaluate as 'true' [-Waddress]|
C:\straustrup\my\calc\main.cpp|27|warning: the address of 'PriorityInt div(const string&)' will always evaluate as 'true' [-Waddress]|
C:\straustrup\my\calc\main.cpp|27|warning: the address of 'PriorityInt fir(const string&)' will always evaluate as 'true' [-Waddress]|
C:\straustrup\my\calc\main.cpp|29|error: redefinition of 'struct Symbool'|
C:\straustrup\my\calc\main.cpp|8|error: previous definition of 'struct Symbool'|
C:\straustrup\my\calc\main.cpp||In function 'PriorityInt sum(std::string&)':|
C:\straustrup\my\calc\main.cpp|54|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\straustrup\my\calc\main.cpp||In function 'PriorityInt sub(std::string&)':|
C:\straustrup\my\calc\main.cpp|58|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\straustrup\my\calc\main.cpp||In function 'PriorityInt mult(std::string&)':|
C:\straustrup\my\calc\main.cpp|62|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\straustrup\my\calc\main.cpp||In function 'PriorityInt div(std::string&)':|
C:\straustrup\my\calc\main.cpp|66|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\straustrup\my\calc\main.cpp||In function 'PriorityInt fir(std::string&)':|
C:\straustrup\my\calc\main.cpp|70|warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build finished: 10 errors, 10 warnings (0 minutes, 2 seconds) ===|


Половину исправил

Автор: Crafty 30.3.2013, 20:26
Код

struct Symbool // Структура должна быть объявлена до массива структур, иначе компилятор не знает сколько памяти нужно выделить под массив
{
    PriorityInt (*action)(const string&);
    bool haveEnd;
    char begin;
    char end;
};
Symbool simbs[5] = {{sum, false, '+','\0'}, {sub, false, '-', '\0'},
                   {mult, false, '*', '\0'}, {div, false, '/','\0'},
                                     {fir, true, '(',')'}};

Автор: kolesnle 30.3.2013, 20:35
Код

struct PriorityInt
{
    int result;
    int priority;
};

struct Symbool
{
    PriorityInt (*action)(const string&);
    bool haveEnd;
    char begin;
    char end;
};

extern int getEnd(string&);

int getEnd(const string& str)
{
    int temp=0;
    for(int i=0;str[i]!=' '; i++) temp++;
    return temp;
}

PriorityInt sum(string& arguments)
{
    PriorityInt result;
    return result;

}
PriorityInt sub(string& arguments)
{
    PriorityInt result;
    return result;
}
PriorityInt mult(string& arguments)
{
    PriorityInt result;
    return result;
}
PriorityInt div(string& arguments)
{
    PriorityInt result;
    return result;
}
PriorityInt fir(string& arguments)
{
    PriorityInt result;
    return result;
}

Symbool simbs[5] = {{sum, false, '+','\0'}, {sub, false, '-', '\0'},
                   {mult, false, '*', '\0'}, {div, false, '/','\0'}, //60-я строка
                                     {fir, true, '(',')'}};


Теперь ругается на 60-ую строку
Цитата
C:\straustrup\my\calc\main.cpp|60|error: invalid conversion from 'PriorityInt (*)(std::string&) {aka PriorityInt (*)(std::basic_string<char>&)}' to 'PriorityInt (*)(const string&) {aka PriorityInt (*)(const std::basic_string<char>&)}' [-fpermissive]|



Добавлено через 12 минут и 29 секунд
Извините, я дебил, все исправил

Автор: Crafty 30.3.2013, 21:20
Цитата(kolesnle @  30.3.2013,  20:35 Найти цитируемый пост)
все исправил
 Отмечай тему как решеную тогда.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)