1 Востаннє редагувалося Bartash (19.07.2013 16:51:31)

Тема: Не викликається wxMessageDialog з шаблонного методу класу [SOLVED]

Програма на wxWidgets. Загальна ідея - шаблонний клас MyParser, що за єдиним алгоритмом препарує дані, а потім віддає спеціалізованій для конкретного типу реалізації функції на парсинг.

//MyParser.h
template<typename T>
class MyParser
{
//....bla-bla-bla...
public:
        void startParsing(); //Ця функція викликає функцію parseActions
        void parseActions(string content); // має спеціалізацію для кожного типу <T>
};
//....
#include "MyParserBody.h"

Код методу startParsing() вирішив винести в окремий заголовок, "MyParserBody.h" (просто для зручності та візуалізації).

//MyParserBody.h
template<typename T>
    void LogParser<T>::startParsing()
    {
                string content;
        for(list<unsigned int>::const_iterator iter = terminals.begin(); iter != terminals.end(); iter++)
        {
                        //тут іде отримання власне вмісту змінної content
            parseActions(content);// парсинг
        }
    }

Реалізації parseActions() є в окремому cpp-файлі.

Проблема у чому: знадобилося мені показати wxMessageDialog з деяким вмістом на кожній ітерації циклу по terminals. Я розмістив у тілі циклу відповідний код:

Себто

//MyHeaderBody.h
template<typename T>
    void LogParser<T>::startParsing()
    {
                string content;
                wxMessageDialog dialog(0, "My cool information");
        for(list<unsigned int>::const_iterator iter = terminals.begin(); iter != terminals.end(); iter++)
        {
                        //отут - фейл:
                        dialog.ShowModal();
                        //тут іде отримання власне вмісту змінної content
            parseActions(content);// парсинг
        }
    }

Проте вікно не спливло. Коли спробував викликати подібне вікно у parseActions() - видало нормально.
Список terminals не порожній (перевіряв).

У чому граблі?

I belong to the Dead Generation.

2 Востаннє редагувалося -=ЮрА=- (21.07.2013 23:28:38)

Re: Не викликається wxMessageDialog з шаблонного методу класу [SOLVED]

Bartash, на wxWidgets не програмую проте проводячи аналогію з API MessageBox, вважаю що проблема полягє у тому, що немаэ хендлу вікна чи вказівника на класс парента - тобто потрібен валідний перший параметр
wxMessageDialog dialog(0, "My cool information");

3

Re: Не викликається wxMessageDialog з шаблонного методу класу [SOLVED]

-=ЮрА=-, parent валідний (бокс - незалежний).

I belong to the Dead Generation.

4

Re: Не викликається wxMessageDialog з шаблонного методу класу [SOLVED]

Тоді, схоже, проблема в чомусь іншому, чого ви в коді не навели. Можете побудувати мінімальний компільований код, на якому виникає проблема?

Подякували: Bartash1

5

Re: Не викликається wxMessageDialog з шаблонного методу класу [SOLVED]

koala написав:

Тоді, схоже, проблема в чомусь іншому, чого ви в коді не навели. Можете побудувати мінімальний компільований код, на якому виникає проблема?

Не напряму, але у точку.
Обрізаючи проект до розмірів прикладу, виявив помилку у ДНК у проектуванні. Суть: колись проект будувався як сукупність кількох підпроектів, а зараз поєднаний в один суцільний. Граблі були у тому, що шлях до хедерів одного з підпроектів лишився старим, тож і хедери тяглися зі старого місця.

Усім дякую.:)

I belong to the Dead Generation.
Подякували: koala1