我有一个来自源文件 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();
现在我知道它不会编译返回未定义的引用,这是一种耻辱。必须在 s.cpp 中的括号外定义 ctor 和 get()。我想知道是否有可能不需要的 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());
考虑到内存分配,不应该在实际执行时返回 9 而不是 8?即使我将 c 更改为 a,使其与 1 完全相同,它似乎总是从 s.cpp 中查找 a 及其初始值。建议向 main 声明除方法之外的其他东西是多余的。