C ++, шаблоны, статические функции - PullRequest
0 голосов
/ 28 декабря 2010

Мой вопрос снова касается шаблонов ... Из статической функции шаблона "functionA" в не шаблонном классе A

Ah

#ifndef A_H
#define A_H
#include "B.h"
class A
{
  template <class T>
  static T functionA();

};

template <class T>
T A::functionA()
{
     T var;
     T result = B::functionB(var); //Class B has not been declared
}

#endif

Я вызываю статическую функцию шаблона "function B"объявлено и определено внутри не шаблонного класса B. До объявления класса A класс B уже был включен ...

Bh

#ifndef B_H
#define B_H
class B
{
  template <class T>
  static T functionB(T var) ;
};

template<class T>
T B::functionB(T var)
{
   ...some code
}
#endif

Во время компиляции программы следующее сообщение об ошибкеapperared:

// Класс B не был объявлен

Это не настоящий код, только пример для иллюстрации.Эта ситуация возникла при вызове некоторых статических методов в моей программе.Можете ли вы помочь мне, пожалуйста?

1 Ответ

1 голос
/ 29 декабря 2010

Конкретная проблема с размещенным кодом заключается в том, что функции не объявлены как общедоступные.Кроме того, функция A не возвращает значение.

Следующий код будет выполняться правильно.

файл Ah

#ifndef A_H
#define A_H
#include "B.h"

class A
{
public:
  template <class T>
  static T functionA();
};

template <class T>
T A::functionA()
{
     T var = 4;
     T result = B::functionB(var); //Class B has not been declared
     return result;
}

#endif

файл Bh

#ifndef B_H
#define B_H
class B
{
public:
  template <class T>
  static T functionB(T var) ;
};

template<class T>
T B::functionB(T var)
{
  var++;
  return var;
}
#endif

файл main.cpp

#include "A.h"
#include <stdio.h>

int main(void)
{
  int result = A::functionA<int>();
  printf("result: %i\n", result);
  return 0;
}

выход

result: 5
...