簡體   English   中英

編譯器錯誤:在'>'標記之前的預期primary-expression

[英]compiler error: expected primary-expression before '>' token

#include <string>
...
template <typename DefinitionsIterator>
void parse(const CIET_NS ::VariadicArguments& argumentList, DefinitionsIterator firstDef, DefinitionsIterator lastDef, Map& res)
{
    for (int i = 0; i < argumentList.size(); ++i) {
        CIET_NS ::Object obj = argumentList.at(i);
        std::string objStr = obj.convert<std::string>();
        qDebug() << objStr.c_str();

        //qDebug() << argumentList.at(i).convert<std::string>().c_str();

    }

此代碼編譯但注釋的行沒有。 我收到了這個錯誤

 error: expected primary-expression before '>' token

怎么會發生這種情況?

template <typename ChildClass, typename ListElementType, typename DuplicateType>
class BasicObject
{
public:
    BasicObject();
    ~BasicObject();

public:
    Tcl_Obj* tclObject() const;
    Tcl_Obj* releaseObject();
    template <typename T>
    T convert(Interpreter& interp) const;
    template <typename T>
    T convert() const;

Object派生自BasicObject

Compiler version:
g++ -v
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)

convert是模板時,您必須指明(類似於使用typename來指示名稱是一種類型)。

qDebug() << argumentList.at(i).template convert<std::string>().c_str();
                               ^^^^^^^^

否則編譯器認為<是比較並且在看到>之前會被混淆,然后才能進行比較。

您的編譯器很古老 - 基於您提供的數據,它是隨RHEL4一起提供的GCC 3.4.6,幾年前由供應商提供EOLed(是的,現在它處於“延長生命周期”,直到2015年,這意味着你真的,真的不應該在那上部署新的應用程序)。

應該與任何支持的Qt版本一起使用的最古老的GCC版本是GCC 4.2(在特殊情況下)和GCC 4.4(對於Qt 4.7)。 你的編譯器有bug。 為什么需要在這樣一個能夠編譯有效C ++代碼的古老平台上進行部署?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM