小编Sir*_*lot的帖子

为什么我不能获取返回值的地址?

我已将一些代码拆分为两个文件,之前它正在运行.在一个文件中,我有一个函数,它有一个out值参数,它是一个指向指针的指针.

我正在通过调用getter并取消引用它来填充此参数:

foo(&bar());
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,说''和'需要一个l值'.我理解这个错误意味着什么,但我认为我能够做到这一点,因为它是一个指针,因此它代表了原始的"事物".

是否与实际指针内存位置可能发生变化的事实有关,即使它指向正确的事情?但为什么它在同一个文件之前才有效呢?

提前致谢!

c pointers lvalue

3
推荐指数
1
解决办法
188
查看次数

继承构造函数:从C#转换为C++

我来自C#背景,我会写一个类和构造函数,如下所示:

public class Grunt : GameObject
{
    public Grunt()
        : base()
    {
         // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在C++中编写构造函数继承?在标题和源中.我知道你没有'base'关键字可以使用,但其他语法是否相同?

c# c++ inheritance constructor

3
推荐指数
2
解决办法
136
查看次数

省略else关键字

这两种方法之间有什么真正的区别吗?

方法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++

3
推荐指数
2
解决办法
209
查看次数

比较char和const char*

string line = "blerdy blah";
for (int i = 0; i < string.size(); i++)
{

    line[i] != "n";
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到错误"无法从char转换为const char*"

如果我用最后一行替换

line[i] != *"n";
Run Code Online (Sandbox Code Playgroud)

有用.我明白为什么在某种意义上,我正在取消引用一个指针.我没有得到的是为什么它首先是一个指针.这样写的任何字母实际上都是指向某个字符的指针吗?就像程序在某处有一组每个符号一样,这就是我指向的内容?

如果是这种情况,我可以做一些愚蠢的事情,比如让'n'指针指向别的东西吗?

c++

3
推荐指数
2
解决办法
1万
查看次数

静态助手类

在C#中我创建了一个静态类,它有许多我可以直接调用的数学辅助函数而无需创建类的实例.我似乎无法在C++中使用它.

例如,如果该类被称为MathsClass并且有一个名为MultiplyByThree的函数,那么我会像这样使用它:

float Variable1 = MathsClass.MultiplyByThree(Variable1);
Run Code Online (Sandbox Code Playgroud)

在我的代码的C++版本中,我收到错误:

 'MathsClass' : illegal use of this type as an expression
Run Code Online (Sandbox Code Playgroud)

 error C2228: left of '.MultiplyByThree' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)

我如何编写C#静态类的C++等价物来提供这种功能?

c++

3
推荐指数
1
解决办法
6886
查看次数

值返回1.#INF000

交集算法不起作用; 其中一个值,tmin评估为1.#INF000- 这意味着什么,为什么会发生?tmax似乎很好.

float Ray::Intersects(BoundingBox boundingBox)
{
// direction is unit direction vector of the ray
D3DXVECTOR3 dirfrac(
    1.0f / direction.x,
    1.0f / direction.y,
    1.0f / direction.z);

D3DXVECTOR3 min = boundingBox.Min();
D3DXVECTOR3 max = boundingBox.Max();

//min and max are the negative and positive corners of the bounding box
float t1 = (min.x - origin.x) * dirfrac.x;
float t2 = (max.x - origin.x) * dirfrac.x;
float t3 = (min.y - origin.y) * dirfrac.y;
float t4 …
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
1
解决办法
4562
查看次数

服用1.0f或-1.0f的acos是合法的吗?

我的代码有问题,代理商四处走动突然消失了.这似乎是因为它们的位置在x和y轴上突然变为1.#INF000.我做了一点研究,有人说如果一个值分别超过或低于1和-1,这可能会发生在acos上,但接着说如果值也很接近就会发生这种情况.我添加了一个if语句来检查我是否曾经使用1或-1的acos并且它确实在它们消失之前评估为1个帧周期,但是我真的不明白能够修复它的问题.任何人都能对这件事情有所了解吗?

D3DXVECTOR3 D3DXVECTOR3Helper::RotToTarget2DPlane(D3DXVECTOR3 position, D3DXVECTOR3 target)//XY PLANE
{
    //Create std::vector to target
    D3DXVECTOR3 vectorToTarget = target - position;

    D3DXVec3Normalize(&vectorToTarget, &vectorToTarget);

    //creates a displacement std::vector of relative 0, 0, 0
    D3DXVECTOR3 neutralDirectionalVector = D3DXVECTOR3(1, 0, 0);//set this to whatever direction your models are loaded facing   

    //Create the angle between them

    if(D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector) >= 1.0f ||D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector) <= -1.0f)
    {
        float i = D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector);
        float j = 0; //ADDED THIS IF STATEMENT
    }

    float angle = acos(D3DXVec3Dot(&vectorToTarget, &neutralDirectionalVector));

    if (target.y > …
Run Code Online (Sandbox Code Playgroud)

c++ math

3
推荐指数
2
解决办法
5522
查看次数

为什么我不能取消引用迭代器?

如果我有一个对象向量(普通对象,而不是指针或引用),为什么我不能这样做?

Object* object;

object = vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)

要么

object = &vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)

要么

object = &(*vectorOfObjects.end());
Run Code Online (Sandbox Code Playgroud)

如果'对象'是参考,也是同样的问题.

c++ iterator

3
推荐指数
2
解决办法
2万
查看次数

3
推荐指数
1
解决办法
185
查看次数

检查矢量索引是否为空

在我的代码中,我需要这样做:

if (edges[j].ConnectedToNode() != i) //problem line
{
    edges.push_back(Edge(i, j, nodes[i].Position(), nodes[j].Position(), distanceToNode)); 
}
Run Code Online (Sandbox Code Playgroud)

但是,有可能边缘[j]尚不存在.我如何测试这个以避免和索引超出范围的异常?(这与路径节点有关,基本上如果存在将j连接到i的边缘,我不想从i添加另一个到j.

c++ vector

2
推荐指数
1
解决办法
8375
查看次数

标签 统计

c++ ×8

c# ×2

.net ×1

arrays ×1

c ×1

constructor ×1

inheritance ×1

iterator ×1

lvalue ×1

math ×1

pointers ×1

vector ×1