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

Вызывается не тот конструктор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна документация по библиотеке fann на русском http://www.cyberforum.ru/cpp/thread519171.html
необходим справочник по функциям на русском для библиотеки fann. ну или хотя бы как извлечь коэффициенты весов (коэффициенты связи) чтобы можно было сохранять обучение сети и каждый раз заново не обучать.
C++ Шумы Перлина Мне в Универе дали индивидуальное задание, написать простенькую "матрицу ландшафта" используя шумы Перлина. В инете всё на других языков (и много не понятно), и везде используются разные функции о_О (Вплоть до полного рандома). Можете объяснить как именно этой гадостью пользоваться. П.С. Мне не нужен код программы, я хочу понять как оно должно работать. http://www.cyberforum.ru/cpp/thread518727.html
teamviewer C++
это рпограмма для удаленного управления с одного компа другим.мне кажется она написана на С. она хороша тем что ей не надо знать IP компа. ей нужно лишь знать некий ID сгенерированный на управляемом компе. может кто подскажет как такое реализовано в теории. найти в сети комп по ID минуя любые низлежащие препятствия ввиде IP адресов, маков, шлюзов роутеров NAT и прочего
Можно ли использовать параметр шаблона без типа? C++
#define TV(OBJ) typeof(OBJ), OBJ template<class T, T obj> class A {/*...*/}; int f (int); A<TV(f)> a; Можно ли сделать такое-же, но без препроцессора?
C++ Параллельное вычисление http://www.cyberforum.ru/cpp/thread517569.html
Необходимо реализовать последовательный и параллельный алгоритм вычисления факториала N!. Есть только последовательный расчёт. Если кто может распараллелить помогите пожалуйста. #include <stdio.h> #include <iostream> #include <sstream> #include <vector> #define base 1000000000 void writelong(std::vector<int> vec){ printf ("%d", vec.empty() ? 0 : vec.back()); for (int...
C++ Контроль загрузки ЦП Написал программу для обработки данных(точнее обучение многослойного персептрона), алгоритм линейный. Ноут 3 Гб оперативки, Проц - i3 380M (2 ядра/4 потока по 2.53ГГц/ядро) Когда программа работает я смотрю в диспетчере устройств: она использует 2 мб оперативки и 25% процессора. 25% это хорошо комп не подвисает)) можно чего угодно делать) Но в этом еще и минус: не могу увеличить % загрузки.... подробнее

Показать сообщение отдельно
mdt::Vladimir
7 / 7 / 0
Регистрация: 23.09.2011
Сообщений: 32
15.03.2012, 15:13     Вызывается не тот конструктор
Имеется класс, вот часть его объявления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MQLCopir : protected ClientCopir
{
private:
    bool _fatal;
    std::string _errMsg;
protected:
    void fatalError(bool fatal) {_fatal = fatal;}
    void errorMessage(const std::string &msg) {_errMsg = msg;}
public:
    MQLCopir(const char *login, const char *pass);
    MQLCopir(const std::string &login, const std::string &pass);
    MQLCopir(const std::string &msg, bool fatal = false);
    ~MQLCopir() {if (getTradeMode() != Error) deinit();}
    bool fatalError() const {return _fatal;}
    std::string errorMessage() const {return _errMsg;}
};
Как видно имеет 3 конструктора (хватило бы и двух, но из-за описанной ниже проблемы решил третий добавить с const char*). Ниже даны определения конструкторов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MQLCopir::MQLCopir(const char *login, const char *pass) :
                ClientCopir(Trader)
{
    init(login, pass, false);
}
 
MQLCopir::MQLCopir(const std::string &login, const std::string &pass) :
        ClientCopir(Trader)
{
    init(login, pass, false);
}
 
MQLCopir::MQLCopir(const std::string &msg, bool fatal)
        : ClientCopir(Error), _fatal(fatal), _errMsg(msg)
{
 
}
И ниже функция, где вызывается конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
EXPORT(void*) init(const char *login, const char *pass)
{
    try
    {
        return static_cast<void*>(new MQLCopir(login, pass));
    }
    catch (Exception &e)
    {
        return static_cast<void*>(new MQLCopir(e.message(), true));
    }
    catch (Poco::Exception &e)
    {
        return static_cast<void*>(new MQLCopir(e.message(), true));
    }
    catch (std::exception &e)
    {
        return static_cast<void*>(new MQLCopir(e.what(), true));
    }
    return NULL;
}
Эта функция предназначена для использования в другом языке, поэтому происходит преобразование к типу void*. Два конструктора в классе собственно предназначены для инициализации класса и дальнейшей работы с ним, третий конструктор предназначен для сигнализации об ошибке, чтобы вызывающая программа при проверке fatalError не пыталась в дальнейшем использовать класс и вывела сообщение об ошибке.
Проблема состоит в том, что при вызове функции init в блоке try-catch вызывается конструктор MQLCopir(const std::string &msg, bool fatal) вместо нужного. Вопроса два: почему вызывается не тот конструктор и как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru