【问题标题】:expected primary-expression before ‘>’ token [duplicate]“>”标记之前的预期主表达式[重复]
【发布时间】:2016-10-26 00:45:07
【问题描述】:

我有这样的代码:

class Client2ServerProtocol {

};

class ProtocolHelper {
public:
    template<class ProtocolClass>
    int GetProtocolId() {
        return -1;
    }
};

template<> inline int
ProtocolHelper::GetProtocolId<Client2ServerProtocol>() {
    return 1;
}

template<typename PROTOCOL_HELPER>
class Dispatcher {
public:
    template<typename PROTOCOL_CLASS>
    void Subscribe(int msgId) {
        int protoId = helper.GetProtocolId<PROTOCOL_CLASS>();
        printf("Subscribe protoId %d, msgId %d", protoId, msgId);
    }
    PROTOCOL_HELPER helper;
};

int main() {
    Dispatcher<ProtocolHelper> dispatcher;
    dispatcher.Subscribe<Client2ServerProtocol>(1);
    return 0;
}

它在 MSVC 下编译成功(并且可以工作),但 gcc 抱怨语法无效:

test.cc:23:56: 错误:“>”标记之前的预期主表达式 int protoId = helper.GetProtocolId();

test.cc:23:58: 错误:')' 标记之前的预期主表达式

我做错了什么? int protoId = helper.GetProtocolId();

【问题讨论】:

    标签: c++ templates generic-programming


    【解决方案1】:

    您只需要输入template 关键字来表示它遵循模板:

    int protoId = helper.template GetProtocolId<PROTOCOL_CLASS>();
                         ^^^^^^^^
    

    【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2013-08-29
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多