2
私はこれを理解しようとしていました(今私が行っている場所は7amです)。オブジェクトをポインタに変換できませんC++
インスタンス化されたオブジェクトのアドレスをポインタに設定する際に問題があります。ここでは主な機能です:私はクラスのすべてのメソッドを定義する別のcppファイルを持っている
#include<iostream>
typedef uint32_t word_t;
class PositionVector {
public:
word_t * vec;
/*some other member variables */
PositionVector();
PositionVector(size_t len);
PositionVector & operator &();
PositionVector & operator !();
~PositionVector();
/*some other member functions*/
void resize(size_t len);
};
:
#include "position_vector.h"
int main(){
PositionVector res = PositionVector(10);
PositionVector * ptr;
ptr = &res; // <--- WHERE IT BREAKS
}
AはHファイル「position_vector.h」のバージョンを剥ぎ取ら。
これは、コードのいくつかの大規模なセットの一部であるが、ここで失敗したコンパイルです:
g++-4.9 -std=c++11 -Werror -Wall -Wextra -g -Isrc -ggdb -c -o bin/main.o src/main.cpp
それはエラーで失敗します。私はスーパーの基本的な何かが欠けする必要がありますが、私は」
g++-4.9 -std=c++11 -Werror -Wall -Wextra -g -Isrc -ggdb -c -o bin/main.o src/main.cpp
src/main.cpp: In function ‘int main()’:
src/main.cpp:27:9: error: cannot convert ‘PositionVector’ to ‘PositionVector*’ in assignment
ptr = &res;
^
veはちょうどすべてのナイターを引っ張って、私は仕事に走らなければなりません...だから私は本当にいっぱいだと思うことはできません。あなたのクラスでoperator&
をオーバーロードしました
また、これを演算子の戻り値の型として保持したい場合は、 'std :: addressof'を使用してポインタを取得できます。 – vu1p3n0x
ありがとう!あなたは人生の節約者です... @ vu1p3n0x - 正に言及されています。私はまだスタック割り当てクラスでヒープ割り当てクラスメンバーを処理する方法については混乱していますが、それは別の時間です... –
@FrancoSolleza最良の方法は、ヒープ割り当てスタックを手動で処理しないことです。普通のオブジェクトの場合は 'std :: unique_ptr'や' std :: shared_ptr'でラップし、配列には 'std :: vector'などを使います。その後、生涯や例外的な安全性について心配する必要はありません。 – Jens