x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

ポインターの処理の仕方が悪くてエラーが出る

下のようにプログラムを書いたのですが、CPPに書いたような書き方をすると、「C4238 非標準の拡張機能が使用されています: 右辺値のクラスが左辺値に使用されます。」というエラーが出てしまいます。 よい書き方が思いつかないので、ご教授のほどよろしくお願いいたします。

ヘッダー


UCLASS()
class MYPROJECT_API Utest_s : public UObject
{
    GENERATED_BODY()
public:
    Utest_s();
    Utest_s(int x);
    ~Utest_s();
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    int x;
};
UCLASS()
class MYPROJECT_API Utest : public UObject
{
    GENERATED_BODY()
public:
    Utest();
    ~Utest();
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    TArray<Utest_s *> x;
    UFUNCTION(BlueprintCallable, Category = "Simulation")
    void run();
};
UCLASS(Blueprintable , BlueprintType)
class AMyGameMode : public AGameModeBase
{
    GENERATED_BODY()
public:
    AMyGameMode();
    virtual void BeginPlay() override;
    virtual void Tick(float DeltaTime) override;
    Utest *s;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    int32 aa;
};

CPPファイル


this->plant_types.Add(&Utest_s(100));

Product Version: UE 4.19
Tags:
more ▼

asked Apr 10 '18 at 11:25 PM in Japanese

avatar image

cmd_testkusa
7 2 2 5

avatar image T_Sumisaki Apr 11 '18 at 01:08 AM

差し障りがなければCPPファイルの内容はもう少し前後が分かるようにしていただくと回答しやすくなるかと思います

avatar image Chori Apr 11 '18 at 03:02 AM

まず、そのコードには2つの問題があります。

  1. 一時オブジェクトのアドレスを保持しようとしている
    これは言語レベルで普通にNGなコードです。
    実体が無くなるのに、そのアドレスを保持するのはおかしいですよね?

  2. UObject 派生のクラスはUE4ではそのまま実体化できず、NewObject()を使用する
    http://api.unrealengine.com/JPN/Programming/UnrealArchitecture/Objects/
    上記に公式ドキュメントがあります。

avatar image cmd_testkusa Apr 11 '18 at 09:27 AM

実は質問する前に、NewObject()見つけてたのですが、よくよく考えたら、コメントアウト文のように、わざわざUtest_sクラスのコンストラクタを強引にポインタ型にしたものを渡してました。 ありがとうございます。解決しました。


UCLASS()
class MYPROJECT5_API Utest_s : public UObject
{
    GENERATED_BODY()
public:
    Utest_s() { this->x = 100; };
    Utest_s(int x) { this->x = x; };
    ~Utest_s() {};
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    int x;
};
UCLASS()
class MYPROJECT5_API Utest : public UObject
{
    GENERATED_BODY()
public:
    Utest() {};
    ~Utest() {};
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
        TArray
  
    x;
    UFUNCTION(BlueprintCallable, Category = "Simulation")
        void run() {
            //this->x.Add(&Utest_s(10));
            Utest_s *a = NewObject
   
    ();
            a->x = 10;
            //  これはできない。あきらめてセッター作るべき
            //a = &Utest_s(10);
            this->x.Add(a);
        };
};

   
  

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

解決したようで良かったです。
コードのイメージも大枠は問題ないかと思います。


Utest_sクラスのコンストラクタを強引にポインタ型にした

C++erとしてこの解釈は良くないので、手すきの際にでも以下のリンクを読んでみてください。
https://cpprefjp.github.io/lang/cpp11/rvalue_ref_and_move_semantics.html
きっと理解が深まると思います。
more ▼

answered Apr 11 '18 at 10:04 AM

avatar image

Chori
131 2 2 3

avatar image cmd_testkusa Apr 12 '18 at 04:37 AM

今のところ下さったリンクがあまり理解できませんが、頑張ります!

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question