Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
mxtnr
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
#1

Наведённые ошибки во внешних *.h - C++

17.10.2013, 02:43. Просмотров 311. Ответов 9
Метки нет (Все метки)

Доброго вечера!

Пишу в VS`10.

Сталкиваюсь время от времени со следующими сходными проблемами:
  1. ошибки компилятора, указывающие на headers стандартной библиотеки.
  2. прыжки на код stl или другой код в headers внешних библиотек при отладке.

Проблемы конечно не критичные, и их можно обходить.
Но нет ли каких-нибудь удобных опций, приёмов или инструментов чтобы их избегать?

----
Например, сейчас не могу найти причину ошибки:
Ошибка * error C2593: неоднозначный "operator ==" c:\***\include\xmemory 271

Код в xmemory:
C++
1
2
3
4
5
6
7
template<class _Ty,
    class _Other> inline
    bool operator!=(const allocator<_Ty>& _Left,
        const allocator<_Other>& _Right) _THROW0()
    {   // test for allocator inequality
    return (!(_Left == _Right));
    }
Код у меня:
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
29
30
class Option {
    int _optIndex;
    string _arg;
public:
    Option (): _optIndex(0), _arg("") {};
    Option (int optInd, string optArg): _optIndex(optInd), _arg(optArg) {};
    operator int () { return _optIndex; };
    bool operator == ( Option&o ) { return o._arg==_arg && o._optIndex==_optIndex; }
    bool operator != ( Option&o ) { return !(*this == o); }
};
 
/**
 * Check optioins compability and pass out them
 */
vector<Option> getCheckOpts (int argc, char *const *argv, const char *optstring, const struct option *long_options, bool ** optsJointGraph) 
{
    //vector<Option> givenOptsCollection ( argc );
    unsigned iGivenOptsCollection = 0;
    int c; // short option sign
    int long_option_index = 0; // 
    /*while ( ( c = getopt_long (argc, argv, optstring, long_options, & long_option_index ) ) != -1 ) {
        givenOptsCollection [ iGivenOptsCollection ++ ] = Option(long_option_index, optarg);
    }
    forcount ( i, iGivenOptsCollection ) forcount ( j, iGivenOptsCollection ) {
        if ( i != j && !optsJointGraph[i][j] ) throw 500;
    }*/
    //return givenOptsCollection;
}
 
getCheckOpts (argc, argv, optstring, long_options, optsJointGraph);

Если закомментировать вызов getCheckOpts, сборка выполняется успешно.

Я закомментировал часть кода в поисках места ошибки.

p.s. Надеюсь, это не будет расценено, как 2 вопроса.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 02:43     Наведённые ошибки во внешних *.h
Посмотрите здесь:

Найти причины и способы исправления ошибки "fatal error LNK1120: 1 неразрешенных внешних элементов" - C++
fatal error LNK1120: 1 неразрешенных внешних элементов Вот такая штука. Все уже делал.. В чем ошыбка? #include &lt;iostream&gt; #include...

Выделение внешних переменных - C++
Сделал программу, которая выделяет внешние переменные. Подаю в программу код/текст кода извне. Проблема в том, что программа работает не...

2 неразрешенных внешних элементов - C++
Здравствуйте, второй день не могу поправить ошибку, может кто помочь? :) #pragma once #include &lt;iostream&gt; using namespace std; ...

Создание внешних модулей в С++ - C++
Как создать внешний файл с функциями наподобие модулей в Pascal? Скажите пожалуйста...

1 неразрешенных внешних элементов - C++
Приветствую! При компиляции получаю ошибку: 1&gt;main.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;class...

Программирование с использованием внешних файлов - C++
Необходимо переделать данную программу, что бы &quot;Путь и имя файла вводились с клавиатуры&quot;. #include &quot;stdafx.h&quot; #include &lt;cstdio&gt; ...

Ошибка неразрешенных внешних элементов - C++
Здравствуйте... Изучаю С++, а именно НАСЛЕДОВАНИЕ. Пытаюсь разобраться в примерах(один из них ниже приведен) и при запуске программы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 1
17.10.2013, 02:48     Наведённые ошибки во внешних *.h #2
может попробовать
C++
1
2
3
bool operator == (const Option&o ){
//...
}
mxtnr
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
17.10.2013, 02:50  [ТС]     Наведённые ошибки во внешних *.h #3
Цитата Сообщение от Croessmah Посмотреть сообщение
может попробовать
C++
1
2
3
bool operator == (const Option&o ){
//...
}
У меня уже реализован этот оператор (см. сообщение):
C++
1
bool operator == ( Option&o ) { return o._arg==_arg && o._optIndex==_optIndex; }
Я его реализовал, надеясь, что проблема уйдёт, но это не помогло
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 1
17.10.2013, 02:57     Наведённые ошибки во внешних *.h #4
Цитата Сообщение от mxtnr Посмотреть сообщение
см. сообщение
см. на const
mxtnr
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
17.10.2013, 03:11  [ТС]     Наведённые ошибки во внешних *.h #5
Цитата Сообщение от Croessmah Посмотреть сообщение
см. на const
Вину признаю, но так тоже не работает.

Добавлено через 12 минут
Нашёл требования к обёртываемому вектором типу:
Параметры шаблона
T - Тип элементов.
Тип T должен соответствовать требованиям CopyAssignable и CopyConstructible. (до C++11)
Требования, налагаемые на элементы, зависят от конкретных операций, производимых с контейнером. Как правило, требуется, чтобы тип элементов соответствовал требованиям MoveConstructible и MoveAssignable, но многие функции-члены налагают более строгие требования. (начиная с C++11)
ru.cppreference.com/w/cpp/container/vector

Добавил как и положено конструктор копирования и оператор присваивания (хотя, они и так должны быть созданы компилятором, если не путаю).

Так же не помогает.
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 631
Регистрация: 29.11.2010
Сообщений: 11,750
17.10.2013, 03:17     Наведённые ошибки во внешних *.h #6
Цитата Сообщение от mxtnr Посмотреть сообщение
vector<Option> getCheckOpts (int argc, char *const *argv, const char *optstring, const struct option *long_options, bool ** optsJointGraph)
{
* * //vector<Option> givenOptsCollection ( argc );
* * unsigned iGivenOptsCollection = 0;
* * int c; // short option sign
* * int long_option_index = 0; //
* * /*while ( ( c = getopt_long (argc, argv, optstring, long_options, & long_option_index ) ) != -1 ) {
* * * * givenOptsCollection [ iGivenOptsCollection ++ ] = Option(long_option_index, optarg);
* * }
* * forcount ( i, iGivenOptsCollection ) forcount ( j, iGivenOptsCollection ) {
* * * * if ( i != j && !optsJointGraph[i][j] ) throw 500;
* * }*/
* * //return givenOptsCollection;
}
Эта функция некорректна по своей сути, вы хотите вернуть локальную переменную, которая почиститься в момент выхода с тела функции. Какая вообще была у неё задача?
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 1
17.10.2013, 03:18     Наведённые ошибки во внешних *.h #7
Цитата Сообщение от MrGluck Посмотреть сообщение
вы хотите вернуть локальную переменную
как бы копия, а не ссылка
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 631
Регистрация: 29.11.2010
Сообщений: 11,750
17.10.2013, 03:27     Наведённые ошибки во внешних *.h #8
Цитата Сообщение от Croessmah Посмотреть сообщение
как бы копия, а не ссылка

Не по теме:

Точно, спать пора


Но знать что должна делать функция все же стоило бы
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 1
17.10.2013, 03:32     Наведённые ошибки во внешних *.h #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Но знать что должна делать функция все же стоило бы
стоило бы привести минимальный пример с той же ошибкой, а тут черт ногу сломит. Всё в комментариях, не понятных вызовах, циклы какие-то левые...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 04:32     Наведённые ошибки во внешних *.h
Еще ссылки по теме:

Хранение данных на внешних носителях. - C++
Помогите,пожалуйста,решить: 1. Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные. 2. Вывести...

Хранение данных на внешних носителях - C++
Постановка задачи 1.Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные. 2.Вывести созданный файл...

Касательно const и внешних файлов. - C++
Все мы знаем, что const объявленная в начале модуля...например как глобальная переменная, не дает возможности больше менять значение. Ну...

Dll без внешних зависимостей? - C++
Добрый день, Волею судьбы приходится писать программы для C++Builder XE8. К несчастью, библиотеки для работы с матрицами (решения...

error LNK1120: 1 неразрешенных внешних элементов - C++
/*Person.h*/ class Person { char Name; char FatherName; char SurName; int Byyyy; int Bmm; int Bdd; ...


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

Или воспользуйтесь поиском по форуму:
mxtnr
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 4
17.10.2013, 04:32  [ТС]     Наведённые ошибки во внешних *.h #10
Цитата Сообщение от Croessmah Посмотреть сообщение
стоило бы привести минимальный пример с той же ошибкой, а тут черт ногу сломит. Всё в комментариях, не понятных вызовах, циклы какие-то левые...
Да! И я завершил создание минимального примера, воспроизводящего странное поведение, к моменту прочтения этого сообщения
Так вот, как я и предполагал (мысленно) проявился сайд эффект от другого участка кода.
Но для этого пришлось серьёзно перелопатить код.


Так что хочется вернуться к 1-й части вопроса. Можно ли как-то прослеживать список вызовов не только в режиме отладки.
Например, в php сообщения об ошибках могут сопровождаться стеком вызовов.
Это позволило бы сразу найти место в собственном коде, а не гадать.


p.s. Функцию я написал, как вспомогательный элемент к getopt
Yandex
Объявления
17.10.2013, 04:32     Наведённые ошибки во внешних *.h
Ответ Создать тему
Опции темы

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