Определение конструктора по умолчанию работает или нет

0

У меня есть простое определение класса в Foo.h:

template <typename T>
class Foo
{
  public:
    Foo();
  private:
     char *topPtr;
}

Я реализовал Foo.cpp как:

template <typename T>
Foo<T>::Foo(){
    cout<<"default constructor is runned"<<endl;
    this.topPtr=NULL;
    if(topPtr==NULL){cout<<"topPtr is null"<<endl;}
}

Теперь, чтобы проверить, запущен ли мой конструктор Stack или нет, я пишу простой файл main.cpp:

#include <iostream>
#include "Foo.h"
using namespace std;

int main(){
    Foo<int> foo1();
    return 0;

}

Я предположил, что на моем терминале запущены "конструктор по умолчанию" и "topPtr is null", но у меня ничего нет. Кто-нибудь может мне помочь? Заранее спасибо.

Теги:
constructor

2 ответа

4
Лучший ответ

Утверждение Foo<int> foo1(); объявляет функцию foo1, которая возвращает Foo<int>. Вы должны делать: Foo<int> foo1{};

См. Это: Ссылка

И ваш this.topPtr=NULL; должен быть this->topPtr=NULL;

  • 0
    когда я делаю это Foo <int> foo1 {}, это означает, что я создаю объект Foo с именем foo1 ?? @NedStark
  • 0
    @caesar: Да .......
Показать ещё 5 комментариев
1

Вам не нужно (), используя его, вы объявляете функцию с именем foo1 которая возвращает Foo<int> и не принимает параметр.

Foo<int> foo1; // It calls default constructor

Чтобы использовать this указатель, вы должны использовать -> not .

this->topPtr // to dereference this pointer

Ещё вопросы

Сообщество Overcoder
Наверх
Меню