[英]'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.