qt5的 error: expected primary-expression before ')' tokensP104_class = MyTemplateClass<typename SP104>(SP104);
时间: 2023-09-26 17:09:14 浏览: 138
在您提供的代码中,`SP104` 是一个变量名,而不是类型名。因此,您需要将 `SP104` 的类型作为模板参数传递给 `MyTemplateClass`。
要获取 `SP104` 的类型,您可以使用 `decltype` 关键字。`decltype` 可以获取表达式的类型,而不需要实际执行表达式。因此,您可以使用以下代码来获取 `SP104` 的类型:
```cpp
using SP104Type = decltype(SP104);
```
然后,您可以将 `SP104Type` 作为模板参数传递给 `MyTemplateClass`:
```cpp
sP104_class = MyTemplateClass<SP104Type>(SP104);
```
请注意,在使用 `decltype` 时,要确保表达式是有效的,并且在编译时可以获得类型。否则,可能会收到编译错误或警告。
相关问题
struct SP104{ BYTE addr0; BYTE addr1; BYTE addr2; }; error: expected primary-expression before ')' tokensP104_class = MyTemplateClass<typename SP104>(SP104);
在这个情况下,您需要使用 `typename` 关键字来指定 `SP104` 的类型。由于 `SP104` 是一个结构体,因此我们需要使用 `typename` 关键字来获得它的类型。您可以按以下方式指定 `SP104` 的类型:
```cpp
sP104_class = MyTemplateClass<typename SP104>(SP104());
```
这里使用 `SP104()` 来创建一个 `SP104` 类型的对象,并将其作为参数传递给 `MyTemplateClass` 的构造函数。
class MyTemplateClass:public QObject { Q_OBJECT public: MyTemplateClass(const T& data) : m_data(data) { qRegisterMetaType<SP104>("SP104"); qRegisterMetaType<DP104>("DP104"); qRegisterMetaType<SP104_T>("SP104_T"); qRegisterMetaType<DP104_T>("DP104_T"); qRegisterMetaType<ME_NA104>("ME_NA104"); qRegisterMetaType<ME_NB104>("ME_NB104"); qRegisterMetaType<ME_NC104>("ME_NC104"); qRegisterMetaType<YK_SP104>("YK_SP104"); qRegisterMetaType<YK_DP104>("YK_DP104"); t_cache.setMaxCost(MAP_MAX); } } error: expected primary-expression before ')' token sP104_class = MyTemplateClass<SP104>(SP104);
在这里,您正在尝试将 `SP104` 作为参数传递给 `MyTemplateClass` 的构造函数。但是,根据您提供的代码,`SP104` 并不是类型名称,而是变量名称。因此,您需要使用 `SP104` 的类型名称作为模板参数,而不是变量名称。
要将类型作为模板参数传递,请使用 `typename` 关键字,如下所示:
```
sP104_class = MyTemplateClass<typename SP104>(SP104);
```
请注意,如果您在其他地方也使用了 `SP104` 的类型名称,可能需要在这些位置上进行相应的更改。
阅读全文