Странное поведение шаблонов C ++: «не совпадающая функция» вне main - PullRequest
1 голос
/ 06 октября 2011

Я работаю с шаблонами, с которыми я не очень знаком, но происходит нечто странное.У меня есть шаблонный класс, который наследуется от других шаблонных классов.

Проблема заключается в том, что когда я создаю экземпляр класса в методе main, он работает как положено.Однако, когда я создаю тот же экземпляр внутри функции, он выдает ошибку компиляции: «не совпадает функция», указывающая на конструктор шаблонного класса.

Вопрос в том, почему он работает в методе main, ноне внутри функции тот же кусок кода (проблем с включением нет)

Код огромен, но я постараюсь проиллюстрировать на примере

int main() {
MyTemplatedClassParent<parameters> example(arguments);

MyTemplatedClassChild<parameters> example_1(arguments);
}

Работает отлично.Однако

int main() {
myMethod();
}

с

myMethod() {
MyTemplatedClassParent<parameters> example(arguments);
MyTemplatedClassChild<parameters> example_1(arguments);
}

нет.По существу, во втором случае он не распознает совпадение вызова и конструктора класса и предлагает в качестве кандидата конструктор класса, который я хочу использовать.Дело в том, что в основном методе работает то же самое, единственное отличие состоит в том, что во втором случае он объявляется внутри метода.

edit:

Хорошо, почему-то проблема была в параметрах шаблонов, которые изначально были по умолчанию.Я почти ничего не знаю о шаблонах, но похоже, что между параметрами двух экземпляров, которые возникали при вызове метода, были несоответствия.Не знаю, как и почему, но как только я явно указал параметры шаблонов, он скомпилировался и работал нормально.Опять же извините за то, что не дал много информации, но мои знания о шаблонах очень ограничены.

...