所以我用C++制作一个小游戏,我遇到了一个问题.我在我的player.h文件中有一个名为player的类,在这个类中我有一个名为的公共函数getPotion().我还有一个名为的私有静态变量potion.我对玩家的健康状况完全相同,并且该getHealth()函数playerHealth完美地返回私有静态int .但由于显然没有理由,该getPotion功能不会返回魔药.我得到了一个错误.我还在所有其他文件中包含了头文件.
这是代码:
(对不起,我不知道如何插入代码,所以我必须写出来)
player.h(我遇到问题的代码):
class Player{
private:
static int potions;
public:
int getPotions();
}
Run Code Online (Sandbox Code Playgroud)
player.cpp(我遇到麻烦的代码):
int Player::potions;
int Player::getPotions(){
Player player;
return player.potions;
}
Run Code Online (Sandbox Code Playgroud)
我可能遗漏了一些代码,比如return等等,但那是因为我有一点时间问这个问题,所以我把那些与我的问题相关的部分.
根据以下答案考虑以下代码:
#include <iostream>
#include <sstream>
class StringBuilder {
public:
template <typename T> inline StringBuilder &operator<<(T const &t) {
ss << t;
return *this;
}
inline char const * c_str() {
return ss.str().c_str();
}
private:
std::stringstream ss;
};
void foo(const char *x) {
std::cout << x << std::endl;
}
int main() {
foo((StringBuilder() << "testing " << 12 << 3 << 4).c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
foo()使用临时StringBuilder的返回值调用是否会以任何方式导致UB?
我问的原因是上面的例子效果很好,但在现实生活中,我使用的是一个库,其中包含日志工具,使用这个库我会得到不正确的输出(日志功能需要我的char*正确但在内部覆盖它,这使我相信内存不再有效).
考虑一下C++程序的以下部分; 打印到控制台的值作为注释给出.
{ // case 1
unsigned int x = 10;
unsigned int y = 20;
std::cout << "u/u x - y: " << x-y << std::endl; // 4294967286
}
{ // case 2
int x = 10;
int y = 20;
std::cout << "s/s x - y: " << x-y << std::endl; // -10
}
{ // case 3
unsigned int x = 10;
int y = 20;
std::cout << "u/s x - y: " << x-y << std::endl; …Run Code Online (Sandbox Code Playgroud) 我试图用属性覆盖Python(2.7)类的成员,如下面的代码所示:
class Base:
def __init__(self):
self.foo = 1
class Derived(Base):
foo = property(lambda self: 2)
print Derived().foo
Run Code Online (Sandbox Code Playgroud)
但是,最后一行打印1而不是2.从我认为属性应该工作的方式(即,稍后可以轻松地将成员更改为函数),这对我来说似乎是违反直觉的.我错过了什么吗?有一些解决方法吗?