Bir şeye referans getiren bir sınıf yöntemim var. Bu yöntemi kullandığımda, yalnızca bir şeyin ileri bir bildirimi varsa, yalnızca yöntemin çıktısını atarsam derleyebilirim.Gelecek bildirilen bir türe (C++) başvuru döndürme
ClassA.h:
//Forward declare
class ClassB;
class ClassA
{
public:
ClassA(void);
~ClassA(void);
ClassB& Func();
};
ClassA.cpp:
#include "ClassA.h"
#include "ClassB.h"
ClassA::ClassA(void)
{}
ClassA::~ClassA(void)
{}
static ClassB c;
ClassB& ClassA::Func()
{
return c;
}
Gerçekten İşte
basitleştirilmiş örnek ... neden anlamıyorum ClassB.h: Ben (sadeceClassB
bir ileri beyanı yerken) dönüş değeri atamadan
ClassA::Func
ararsanız Şimdi
#pragma once
class ClassB
{
public:
ClassB(void) {};
~ClassB(void) {};
};
, bu derleme olmaz:
main.cpp:
#include "ClassA.h"
int main(void)
{
ClassA a;
a.Func(); //error C2027: use of undefined type 'ClassB'
return 0;
}
Bunun yerine bu satırı kullanırsam, şu işe yarar: ClassB& b = a.Func();
Burada neler oluyor? Derleyicinin neden ClassB
boyutunu bilmesi veya geri dönüş değeri herhangi bir yere atanmadığında yöntemleri nedir?
Bunu VisualStudio 2010 SP1 ile derliyorum.
Derleyicinin, herhangi bir şeye bağlamazsanız referansı atlayabilmesi için derleyicinin 'ClassB' hakkında bir şey bilmesi için bir neden olmadığını söyleyen bir derleyici hatası gibi görünüyor. –
VS2012'de de çoğaltabilir. – dlf
Hem hata ayıklamada hem de sürümde mi? 2012 yılında – quantdev