/home/wuyan/ error: invalid use of member function 'MyTemplateClass<SP104> parse_threads::sP104_class(SP104 (*)())' (did you forget the '()' ?) sP104_class.set_firstaddr(1,1); ^~~~~~~~~~~
时间: 2023-07-06 16:15:10 浏览: 185
这个错误提示是因为你在使用 `sP104_class` 的时候没有添加括号 `()`,而 `sP104_class` 是一个成员函数,必须要加上括号才能正确调用。你可以在调用 `sP104_class` 函数时加上括号,如下所示:
```
sP104_class().set_firstaddr(1, 1);
```
这样就可以正确调用 `sP104_class` 函数了。
相关问题
/home/wuyan/test/parse_threads.h:868: error: could not convert '<brace-enclosed initializer list>()' from '<brace-enclosed initializer list>' to 'MyTemplateClass<SP104>' MyTemplateClass<SP104> sP104_class{}; ^
这个编译错误提示是说无法将一个空的初始化列表转换为 `MyTemplateClass<SP104>` 类型。在您的代码中,您声明了一个 `MyTemplateClass<SP104>` 类型的对象 `sP104_class`,但是您没有在初始化时给它传递任何实参,只是使用了一个空的初始化列表 `{}`,但是您的类模板并没有默认构造函数,所以编译器不知道如何将空的初始化列表转换为您的类类型。
解决这个问题的方法有两种:
1. 在模板类中添加默认构造函数
您可以在模板类中添加一个默认构造函数,用于在不传递任何实参的情况下初始化对象。例如:
```
template<typename T>
class MyTemplateClass {
public:
MyTemplateClass() = default; // 添加默认构造函数
MyTemplateClass(T t) : m_t(t), t_map{}, old_map{}, t_cache{}, t_vctor{} {}
// ...
private:
T m_t;
QMap<QString, QVector<T>> t_map;
QMap<QString, QVector<T>> old_map;
QCache<QString, QVector<T>> t_cache;
QVector<T> t_vctor;
};
```
这样,您就可以使用空的初始化列表 `{}` 来初始化对象了:
```
MyTemplateClass<SP104> sP104_class{}; // 使用默认构造函数初始化
```
2. 传递实参进行初始化
如果您不想添加默认构造函数,那么您可以在初始化时传递实参给模板类的构造函数,例如:
```
SP104 sp104;
// ... 对 sp104 进行初始化 ...
MyTemplateClass<SP104> sP104_class{sp104}; // 传递实参进行初始化
```
在上述代码中,`sp104` 是您创建的 `SP104` 类型的对象,您可以通过它来初始化 `sP104_class` 对象。
/home/wuyan error: no match for call to '(MyTemplateClass<SP104>) (SP104)' sP104_class(SP104()).set_firstaddr(1,1); ^
这个错误提示是因为你试图使用 `sP104_class` 的构造函数来创建一个对象,并且在创建对象的同时调用 `set_firstaddr` 函数。但是,根据错误提示信息来看,似乎 `MyTemplateClass<SP104>` 并没有定义接受 `SP104` 类型参数的构造函数。
如果你想要在创建对象的同时调用 `set_firstaddr` 函数,可以使用如下代码:
```
MyTemplateClass<SP104> obj;
obj.set_firstaddr(1, 1);
```
这样就可以创建一个对象,并调用 `set_firstaddr` 函数了。
如果你想要在一行代码中完成对象的创建和初始化,可以使用如下代码:
```
MyTemplateClass<SP104> obj = MyTemplateClass<SP104>().set_firstaddr(1, 1);
```
这样就可以在一行代码中完成对象的创建和初始化,并且调用 `set_firstaddr` 函数了。
阅读全文