2017-12-06 20 views
-4

DirectX 12を使用してC++で動的配列を作成しようとしています。 DirectX 11用に作成されたため、ここでは良い変更が行われました。エラーC2679バイナリ '=':タイプ 'int'の右オペランドを取る演算子が見つかりません(または受け入れ可能な変換はありません)

実行時にこのエラーが発生します。 「=」バイナリ

重大度コード説明プロジェクトファイルの行の抑制状態

エラーC2679:なしオペレータは

タイプの右辺のオペランド「INT」を取る(あるいは全く許容可能な変換はありません)が見つかりません

ここには問題があると言うコードがあります。

Vector(int a) 
{ 
    size = a; 
    obj = new T[size]; 
    for(int i = 0 ; i<size; i++) 
    { 
    obj[i] = NULL; 
    } 
} 

完全なヘッダーです。

#include<iostream> 
using namespace std; 
template <class T> 
class Vector 
{ 
private: 
    int size,capacity; 
    T *obj; 
public: 
    Vector() 
    { 
     size = capacity = 0; 
     obj = NULL; 
    } 
    ~Vector() 
    { 
     delete [] obj; 
    } 
    Vector(int a) 
    { 
     size = a; 
     obj = new T[size]; 
     for(int i = 0 ; i<size; i++) 
     { 
      obj[i] = NULL; 
     } 
    } 
    int size_of_list(); 
    bool empty(); 
    void reserve(int); 
    T& operator[](int); 
    T at(int); 
    T front(); 
    T back(); 
    void push_back(T element); 
    void pop_back(); 
    void insert(int,T); 
    void erase(int); 
}; 

.cppファイルはリクエストに応じて利用できます。

+2

[mcve]を入力してください。 –

+1

タイプTとは何ですか?あなたはNULLを割り当てようとしていますが、Tが指定されていないポインタの場合にのみ有効になります。 – Shirik

+3

先に進む前に、良いC++の本を読んでください。 –

答えて

1

あなたはjavaやC#を書いていますが、そこにはC++がありません。 C++には値の意味があります。オブジェクトは一般にNULLに設定することはできません(これは値ゼロのマクロにすぎません)。あなたが適切な値を持っているので、一般的に、必要はありません:、デフォルトの構築オブジェクト

+0

ありがとう、私はC++の知識があまりなく、これはuniプロジェクトとリンクしています。私は0に設定してみましたが、同じエラーが出ます。だから私はこれを必要としないと言っています。 – jshone94

+0

@ jshone94:0または 'NULL'はほとんど同じです。 'ChessBoardPosition'が' 0'に設定された 'Vector 'を持つことはまさに何を意味しますか?それは理にかなっていますか?いいえ - どんな型の 'T'でも値' 0'を割り当てることができると仮定しています。それは真実ではありません。 – MSalters

0

obj [i]がT型へのポインタだと仮定しているようですが、実際にはタイプTのオブジェクトです。objは最初に割り当てられたTオブジェクトへのポインタです。obj [i]アドレスobj + iのTオブジェクト

関連する問題

 関連する問題