簡體   English   中英

'Primary-expression expected'錯誤不使用依賴類型

[英]'Primary-expression expected' error not using dependent type

在下面的代碼中,main()中的'bObj-> b()'行編譯,但'cObj-> c()'行在'''token'之前給出錯誤'expected primary-expression'。 這與依賴類型無關; 在適當的位置添加“模板”或“typename”無濟於事。 什么問題是什么提示? 在此代碼的“真實”版本中,還有許多其他模板和非模板版本的函數“b”。 問題可能只發生在一個地方,而不是其他地方,但我無法確定可能是重要的區別。

#include <boost/shared_ptr.hpp>

class A {};
class D : public A {};

class B
{
public: 
        template <class T> boost::shared_ptr<T> b() { return boost::shared_ptr<T>(); }
};      

class C
{
public: 
        boost::shared_ptr<A> b() { return boost::shared_ptr<A>(); }
};      

int main(int, char **)
{       
        boost::shared_ptr<C> cObj(new C);
        boost::shared_ptr<B> bObj = boost::dynamic_pointer_cast<B>(cObj);

        bObj->b<D>();
        cObj->b<D>();
}    

C沒有成員函數模板 ,只有常規成員函數。 因此,在調用C::b()時不能提供模板參數:

cObj->b<D>(); // ERROR!
cObj->b(); // OK

此外:

在此代碼的“真實”版本中,還有許多其他模板和非模板版本的函數“b”。

那么您提供的代碼很可能不是您在代碼的“真實”版本中遇到的問題的一個很好的例子。

問題可能只發生在一個地方,而不是其他地方,但我無法確定可能是重要的區別。

最了解你的代碼。 我們不能對我們看不到的東西做出假設。 如果這個答案沒有解決你的問題,我認為你應該產生一個更具代表性的例子,說明你的“真實”代碼的作用,可能會將其減少到SSCCE

暫無
暫無

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

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