Stoff Robert Ответов: 2

Ошибка пространства имен код visual studio


Получение ошибки пространства имен в этом коде....
8 IntelliSense: name, за которым следует'::', должно быть именем класса или пространства имен

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyPawn.h"

// Sets default values
AMyPawn::AMyPawn()
{
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
}

// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{
	Super::BeginPlay();
}

// Called every frame
void AMyPawn::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
}

// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);}


Что я уже пробовал:

Я понятия не имею, почему это происходит

2 Ответов

Рейтинг:
2

Rick York

Я думаю ты хочешь писать __super:: вместо Super.

Если вы только вызываете базовый класс без изменения каких-либо параметров и ничего больше не делаете, то нет необходимости реализовывать производный метод.

-редактировать-

Вместо __super на самом деле именно это я и делал раньше __super существует, вы можете определить тип для базового класса. Что-то вроде этого :

using AMyPawn_Base = PawnBaseClass;
и тогда вы можете объявить свой класс следующим образом :
class AMyPawn : public AMyPawn_Base
{
public:
    AMyPawn() : AMyPawn_Base()
    {
    }

    void BeginPlay()
    {
        AMyPawn_Base::BeginPlay();

        // more code here
    }
};
Это должно работать с любым компилятором c++, который поддерживает использование. Я бы сделал это потому, что если я когда-нибудь решу изменить базу данного класса, то это будет сделано только в одном месте, а не потенциально в десятках.


Greg Utas

__super является специфичным для Microsoft. OP, вероятно, из фона Java, но стандартный C++ не имеет "супер", хотя некоторые люди набирают его в классе. Если нет, то вам придется явно назвать суперкласс, что также является хорошей идеей при использовании множественного наследования (gag).

Stoff Robert

Это автоматически сгенерированный код из ue4

Greg Utas

Я понятия не имею, что такое ue4. Как и предложил Рик, вы должны быть в порядке, если используете __super. Единственным недостатком является то, что это не стандартный C++.

Rick York

Visual Studio была отмечена, поэтому я предположил, что и компилятор тоже.

Рейтинг:
1

Richard MacCutchan

Я предлагаю вам разместить свой вопрос по адресу Движок Unreal[^Они гораздо более склонны знать, что должен делать их сгенерированный код.