我被告知我不能在类函数中使用'this'关键字.我来自c#,我已经习惯了这个工作,但是编译器告诉我它只能在非静态成员函数中使用.
D3DXVECTOR3 position;
void Position(D3DXVECTOR3 position)
{
this.position = position;
}
Run Code Online (Sandbox Code Playgroud) 我意识到这是一个很难回答的问题,而没有为你提供大量的代码(我会尽量避免你).
基本上我在X类中得到这个错误,#包括Y类标题.Y类头有三个getter定义
// Getters
static ID3D10Device* PDevice();
static ID3D10Buffer* PBuffer();
static ID3D10Buffer* IBuffer();
Run Code Online (Sandbox Code Playgroud)
我得到三个相同的错误,都发生在类X.所以基本上错误是:
函数中引用的未解析的外部符号ID3D10Device*PDevice()(类X的构造函数)
对不起,如果那有点模糊.知道为什么会这样吗?我用谷歌搜索了它,但我只能对这个错误是什么做出有根据的猜测.
我已经离开了C++一段时间了,我对这个问题有点麻烦.我会饶恕你的坏代码 - 有人可以发一个'模型答案'来为如何用一个接受一些值的构造函数编写一个简单的头文件和源文件,并将一些值传递给它的基础类构造函数?我担心我错误地在线制作内容.谢谢.
有时,最简单的答案是最难在互联网上找到明确的例子.
Pickup::Pickup(std::vector<Agent, std::allocator<Agent>> &agents)" provides no initializer for:
Run Code Online (Sandbox Code Playgroud)
我的许多构造函数都遇到此错误,令人烦恼的是,该错误在它告诉我我没有提供初始化程序的内容之前突然结束。此外,我非常确定我实际上正在为需要它的所有内容提供初始化。任何人都可以阐明这一点吗?
#include "Pickup.h"
Pickup::Pickup(vector<Agent>& agents)
: GameObject(), TOLERANCE(0.1f)
{ // this brace is underlined and is where the error occurs.
xRotation = D3DXVECTOR3(0.005f, 0.005f, 0.04f);
count = 0;
index = -1;
nodeIndex = -1;
isPresent = true;
}
void Pickup::Regenerate()
{
//when the pickup gets picked up, start a countdown
count++;
if (count == 300)
{
isPresent = true;
count = 0;
}
}
//void Pickup::addAmmo(int agentIndex) { }
void Pickup::Update()
{
Rotation(Rotation() …Run Code Online (Sandbox Code Playgroud) 如果在方法中创建局部静态变量,是每个实例初始化一次,还是每个程序初始化一次?
这在C++和Objective-C之间有区别吗?
以下两种参数类型有什么区别?第一个接受一个指针,它实际上是一个内存地址,第二个也是一个内存地址?
foo(float& bar)
{
// do stuff
}
foo(float* bar)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
你能不能同时打电话:
float pow = 3.0f;
foo(&pow);
Run Code Online (Sandbox Code Playgroud)
要么
float* pow = 3.0f;
foo(pow);
Run Code Online (Sandbox Code Playgroud) 我最近了解到,如果你有一个类作为函数参数的引用,那么将某些所需的信息作为局部变量存储,而不是每次在函数中需要时访问类成员都是更好的实践和更有效的方法.
所以...
void function(const Sphere& s)
{
//lots of calls to s.centre and s.radius
}
Run Code Online (Sandbox Code Playgroud)
要么
void function(const Sphere& s)
{
Vector3 centre = s.centre; float radius = s.radius;
//an equal amount of calls to centre and radius
}
Run Code Online (Sandbox Code Playgroud)
我被告知第二个更好,但为什么?而且,哪里是一个开始更充分地研究这个问题的好地方?(请给dummys!)
这是我想要做的:(伪代码)
class DerivedClass : public BaseClass
{
public Draw()
{
BaseClass.Draw()
}
}
class BaseClass
{
protected Draw();
}
Run Code Online (Sandbox Code Playgroud)
两个绘图都具有相同的名称和相同的签名.想要这样做的原因是有时候我希望我的派生类有一个简单调用基类绘制的绘图函数,但有时候我希望派生类选择何时调用基本绘图函数.这意味着我可以保持我实例化派生类的类更干净,并且可以随时调用所有这些类的绘制.派生类本身可以处理细节.
该BaseClass.Draw部分的语法究竟是什么?我认为你实际上可以只是按原样编写它,但是编译器正在抱怨,并且它不像我可以调用Draw因为签名是相同的.
我已将一些代码拆分为两个文件,之前它正在运行.在一个文件中,我有一个函数,它有一个out值参数,它是一个指向指针的指针.
我正在通过调用getter并取消引用它来填充此参数:
foo(&bar());
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误,说''和'需要一个l值'.我理解这个错误意味着什么,但我认为我能够做到这一点,因为它是一个指针,因此它代表了原始的"事物".
是否与实际指针内存位置可能发生变化的事实有关,即使它指向正确的事情?但为什么它在同一个文件之前才有效呢?
提前致谢!
这两种方法之间有什么真正的区别吗?
方法1:
bool IsNumOverFive(int num)
{
if(num > 5)
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
方法2:
bool IsNumOverFive(int num)
{
if(num > 5)
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud) c++ ×9
c ×1
lvalue ×1
member ×1
methods ×1
non-static ×1
objective-c ×1
optimization ×1
pointers ×1