19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
1

#error

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

Author24 — интернет-сервис помощи студентам
Добрый вечер!
При сравнении объектов разных типов, должна вылетать ошибка компиляции. А ошибка получается здесь:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2013, 22:43
Ответы с готовыми решениями:

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

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

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

Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
выдает вот такую ошибку - Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from...

18
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
25.07.2013, 22:47 2
Команды препроцессора работают на этапе компоновки, а на этапе выполнения программы.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
25.07.2013, 22:50  [ТС] 4
Цитата Сообщение от Croessmah Посмотреть сообщение
почитайте про препроцессор!!!
Пойду перечитывать)

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

Добавлено через 19 секунд
Синтаксически правильно, эффекта нет.
0
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
25.07.2013, 23:00  [ТС] 10
Цитата Сообщение от gooseim Посмотреть сообщение
Это вам не поможет.
А что мне поможет? Цианид не предлагать)
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.07.2013, 23:01 12
Цитата Сообщение от Ryabchik Посмотреть сообщение
А что мне поможет?
Любой учебник!
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.07.2013, 23:01 13
Цитата Сообщение от gooseim Посмотреть сообщение
Команды препроцессора работают на этапе компоновки, а на этапе выполнения программы.
0_о...
компановка выполняется компановщиком он же линкер, какой препроцессор на этапе компановки?
0
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
25.07.2013, 23:01  [ТС] 14
Поясню: если сравниваются объекты разных типов, это бессмысленно, но как это запретить?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.07.2013, 23:03 15
Ryabchik, запретить когда? на этапе компиляции? в runtime? какие другие типы могут попасть в сравнение?
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
25.07.2013, 23:04 16
Jupiter, простите, погорячился. На этапе прекомпиляции.
Так устроит?
0
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
25.07.2013, 23:07  [ТС] 17
Jupiter,
На этапе компиляции.
Это реализация "примерного типа данных". Если type - true, значение - точное, если false - примерное.
Сравнивать примерное с точным не нужно.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.07.2013, 23:29 18
ну так шаблоны вам в помощь...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
template<bool isStrict>
struct data_type
{
    int foo;
    
    data_type(int foo) : foo(foo) {}
};
 
bool operator < (const data_type<true>& a, const data_type<true>& b)
{
    return a.foo < b.foo;
}
 
typedef data_type<true> strict_data_type;
typedef data_type<false> non_strict_data_type;
 
int main()
{
    strict_data_type a(10), b(20);
    non_strict_data_type c(10), d(20);
    
    std::cout << (a < b);
    std::cout << (c < d); //error
   
   return 0;
}
по возможности можно ещё и static_assert воткнуть для более вразумительного сообщения об ошибке

Не по теме:

Цитата Сообщение от gooseim Посмотреть сообщение
Так устроит?
угу:)

0
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
26.07.2013, 00:07  [ТС] 19
Jupiter, спасибо за помощь
0
26.07.2013, 00:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2013, 00:07
Помогаю со студенческими работами здесь

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

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

Error C2061: syntax error : identifier 'scanf' как исправить?
Помогите неумному студенту, пожалуйста. Только началось программирование в моей жизни, пока не...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru