У меня есть простое определение класса в 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", но у меня ничего нет. Кто-нибудь может мне помочь? Заранее спасибо.
Утверждение Foo<int> foo1();
объявляет функцию foo1, которая возвращает Foo<int>
. Вы должны делать: Foo<int> foo1{};
См. Это: Ссылка
И ваш this.topPtr=NULL;
должен быть this->topPtr=NULL;
Вам не нужно ()
, используя его, вы объявляете функцию с именем foo1
которая возвращает Foo<int>
и не принимает параметр.
Foo<int> foo1; // It calls default constructor
Чтобы использовать this
указатель, вы должны использовать ->
not .
this->topPtr // to dereference this pointer