Ten program powoduje niepożądany ślepy zaułek:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: błąd: brak elementu o nazwie „C” w „float4x4”; miałeś na myśli po prostu „C”?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Które można „naprawić” za pomocą końcowego typu zwrotu:
auto ::C::M() -> float4x4
{}
teraz wszystko dobrze.
Rozumiem więc, że nie możemy w pełni zakwalifikować nazwy klasy, używając składni deklaratora typu nagłówek-zwrot?
c++
parsing
methods
fully-qualified-naming
v.oddou
źródło
źródło
::
, przypuszczam, że nie ma innego wyjścia.::C
część wygląda jak obejście innego problemu. W przeciwnym razie mogłoby to być po prostuC
(jak sugeruje kompilator;)Odpowiedzi:
Możesz umieścić nawiasy klarowne:
Nie mogę ci powiedzieć, która reguła sprawia, że jest to w porządku, podczas gdy nie jest bez nawiasów, chociaż testowałem z gcc i clang (oba
-pedantic
). Wolałbym końcowy typ zwrotu.źródło