gpt4 book ai didi

c++ - C++ 模板类的成员函数中的类型/值不匹配

转载 作者:行者123 更新时间:2023-11-28 05:54:19 24 4
gpt4 key购买 nike

我有一个类似于这个的代码:

#include <iostream>

template<typename T> class Functor
{
T *pthis;
void (T::*fun)(void);
public:
Functor(T* punteroThis, void (T::*funcion)() ) : pthis(punteroThis), fun(funcion) { }
void operator() (void);
};

template<typename T>
void Functor<T>::operator() ()
{
(pthis->*fun)();
}

template<typename T> class myTimer
{
/*
omitted 'typename' so that T inside task
is the same as T in class myTimer
*/
template<T> class task
{
unsigned id;
bool active;
Functor<T> fun;
unsigned interval;
public:
task(unsigned id_, bool active_, Functor<T> fun_, unsigned interval_) : id(id_), active(active_), fun(fun_), interval(interval_) { }
};


void print(myTimer::task<T> const& t); // << this is not working

};

template<typename T>
void myTimer<T>::print(myTimer::task<T> const& t)
{
std::cout << "id = " << t.id << '\n';
std::cout << "active = " << t.active << '\n';
std::cout << "interval = " << t.interval << std::endl;
}

调用编译器时

g++ -Wall -g -std=c++11 myTimer.h -c

我在 print() 的声明和定义中都遇到了以下错误:

error:   type/value mismatch at argument 1 in template parameter list for
‘template<class T> template<T <anonymous> > class myTimer<T>::task’
error: expected a constant of type ‘T’, got ‘T’

我也尝试了 typename 并得到了相同的输出。我不知道如何解决它。知道发生了什么事吗?

我在 Linux 平台上使用 g++ 版本 4.8.4

最佳答案

此代码不正确:

/*
omitted 'typename' so that T inside task
is the same as T in class myTimer
*/
template<T> class task

如果您希望 T inside task 与包含范围内的 T 相同,只需省略 template<T>完全。

然后你有:

void print(myTimer::task<T> const& t);    // << this is not working

你想要的地方:

void print(myTimer::task const& t);

关于c++ - C++ 模板类的成员函数中的类型/值不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com