ソースファイル s.cpp からの構造体があります。
struct s{
unsigned long long a;
s(unsigned long long b){a=b;}
unsigned long long get(){return a;}
};
そしてメインファイルでは、もちろんg ++ main.cpp s.cppの簡単な構文でコンパイルされています
struct s{
s(unsigned long long b);
unsigned long long get();
};
s s1(123456);
//some code
unsigned long long c=s1.get();
これで、未定義の参照を返すようにコンパイルされないことがわかりました。これは残念です。ctor と get() を s.cpp の括弧の外側で定義する必要があります。おそらく必要ないというg ++フラグがあるのだろうか。しかし、主な問題は、s1.get() は安全なのか、それとも未定義の動作なのかということです。
編集
ご回答ありがとうございますが、私はまだメカニズムをよく理解していません。この場合、s.cpp では次のようになります。
struct teste{
int a=0;
teste(int b);
int g();
};
teste::teste(int b){a+=b;}
int teste::g(){ return a;}
そして主に:
struct teste{
int c=1;
teste(int b);
int g();
};
teste ato(8);
printf("\n%d",ato.g());
メモリの割り当てを考えると、実際のパフォーマンスでは 8 ではなく 9 を返すべきではありませんか? c を a に変更して正確に 1 に変更しても、常に s.cpp から a とその初期値を探しているようです。メソッド以外のものを main に宣言するのは余計なことだと思います。