Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
#1

#error - C++

25.07.2013, 22:43. Просмотров 626. Ответов 18
Метки нет (Все метки)

Добрый вечер!
При сравнении объектов разных типов, должна вылетать ошибка компиляции. А ошибка получается здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#define RIGHT
 
bool approx :: operator> (const approx& obj) const //перегруженный оператор сравнения объектов >
{
    if ( (this -> type != true) || (obj.type != true) )
        #undef RIGHT
    
    #ifndef RIGHT
    #error "Types of the values are different"
    #endif
 
    return (this -> value) > obj.value;
}
В чем дело, не подскажете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 22:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос #error (C++):

Исправить ошибку в WxDev-C++: Error with debugging process: GDB Error: error, No source file named main.cpp - C++
Здравствуйте товарищи! Новенький я в си, установил wxDev-C++, скомпилировал, запускаешь - работает, а чтоб пошагово отладка - не...

Error LNK1120, error LNK2019, error LNK2028, queue - C++
// свойство класса Parser queue<elem*>* postfix = new queue<elem*>; // строка, из-за которой происходит ошибка ...

Ошибка в тестовом примере: "Error 1 error C2143: syntax error : missing ';' before 'if'" - C++
#include<iostream> using namespace std; int main(){ int x, a = 0, b = 10; (cin >> x).get(); while (x){ int c = x % 10; ...

Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR' - C++
выдает вот такую ошибку - Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR' использую visual...

[ilink32 Error] Error: Unresolved external 'zamena (int * *) ' referenced - C++
Вот это программа не работает : вот ошибка которую выдает компилятор: Error: Unresolved external 'zamena(int * *)' referenced from...

Ошибка error C2146: syntax error : missing ';' before identifier 'alph' - C++
Не получается откомпилировать прогу из консоля в MFC, выбивает ошибку error C2146: syntax error : missing ';' before identifier 'alph' ...

18
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
25.07.2013, 22:47 #2
Команды препроцессора работают на этапе компоновки, а на этапе выполнения программы.
0
Croessmah
Ушел
13762 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,722
Записей в блоге: 3
Завершенные тесты: 1
25.07.2013, 22:47 #3
C++
1
2
3
4
5
6
7
8
    if ( (this -> type != true) || (obj.type != true) )
        #undef RIGHT
    
    #ifndef RIGHT
    #error "Types of the values are different"
    #endif
 
    return (this -> value) > obj.value;
почитайте про препроцессор!!!
1
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
25.07.2013, 22:50  [ТС] #4
Цитата Сообщение от Croessmah Посмотреть сообщение
почитайте про препроцессор!!!
Пойду перечитывать)

А все таки, как запретить компиляцию кода?
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
25.07.2013, 22:52 #5
Цитата Сообщение от Ryabchik Посмотреть сообщение
как запретить компиляцию кода
Также как делали вы. Только if - оператор который работает во время выполнения программы, а не во время компиляции.
C++
1
2
3
#if ...
#error ....
#endif
Так будет работать
1
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
25.07.2013, 22:56  [ТС] #6
C++
1
2
3
#if !defined (RIGHT)
    #error "Types of the values are different"
    #endif
Так?
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
25.07.2013, 22:58 #7
Да, будет ошибка, если не определен RIGHT. Только не думаю, что вам это поможет. Потому что RIGHT определяется тоже во время компиляции, а не во время выполнения. Во время выполнения RIGHT - константа.
0
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
25.07.2013, 22:59  [ТС] #8
Цитата Сообщение от gooseim Посмотреть сообщение
Да, будет ошибка, если не определен RIGHT
У меня так же ошибка, как первоначально
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
25.07.2013, 23:00 #9
Цитата Сообщение от Ryabchik Посмотреть сообщение
У меня так же ошибка, как первоначально
Про это я и говорю. Это вам не поможет.

Добавлено через 19 секунд
Синтаксически правильно, эффекта нет.
0
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
25.07.2013, 23:00  [ТС] #10
Цитата Сообщение от gooseim Посмотреть сообщение
Это вам не поможет.
А что мне поможет? Цианид не предлагать)
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
25.07.2013, 23:01 #11
C++
1
2
3
4
5
6
7
bool approx :: operator> (const approx& obj) const //перегруженный оператор сравнения объектов >
{
    if ( (this -> type != true) || (obj.type != true) )
        throw "Types of the values are different";
    
    return (this -> value) > obj.value;
}
Как вариант.
0
Croessmah
Ушел
13762 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,722
Записей в блоге: 3
Завершенные тесты: 1
25.07.2013, 23:01 #12
Цитата Сообщение от Ryabchik Посмотреть сообщение
А что мне поможет?
Любой учебник!
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2013, 23:01 #13
Цитата Сообщение от gooseim Посмотреть сообщение
Команды препроцессора работают на этапе компоновки, а на этапе выполнения программы.
0_о...
компановка выполняется компановщиком он же линкер, какой препроцессор на этапе компановки?
0
Ryabchik
18 / 19 / 1
Регистрация: 09.01.2013
Сообщений: 164
25.07.2013, 23:01  [ТС] #14
Поясню: если сравниваются объекты разных типов, это бессмысленно, но как это запретить?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2013, 23:03 #15
Ryabchik, запретить когда? на этапе компиляции? в runtime? какие другие типы могут попасть в сравнение?
0
25.07.2013, 23:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2013, 23:03
Привет! Вот еще темы с ответами:

Причина ошибки [ilink32 Error] Error: Unable to perform link - C++
Когда сохранил программу и пытаюсь открыть ее снова то мне выкидывает ошибку Warning: Error detected (LME288) Error: Unable to...

Error 1 fatal error C1093: API call 'ImportFile' failed '0x80070003' : ErrorMessage: - C++
// Lab7_1.cpp : main project file. #include "stdafx.h" #include <iostream> using namespace std; float y; void...

Проверить правильность кода. Вылезает Error 5 error C2679: binary '<<' : no operator found which takes a right - C++
Компилятор ругается на ошибку Error 5 error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'Kniga' ...

Error C2760: синтаксическая ошибка / Fatal error C1004: непредвиденное обнаружение конца файла - C++
Набыдлокодил следующее: Graph.h template&lt;class D&gt; class Graph { private: class Edge { private: int v1, v2;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru