小编Ans*_* PP的帖子

创建指向向量<vector<bool>>中元素的指针

如果我想要一个指向 int 向量向量中的元素的指针,我会写:

vector<vector<int>> a (5);
int* p1 = a[4].data();
Run Code Online (Sandbox Code Playgroud)

但是,当我编写以下内容时,它不适用于 bool 向量的向量(为什么?):

vector<vector<bool>> b(5);
bool* p2 = b[4].data();
Run Code Online (Sandbox Code Playgroud)

编译器输出以下错误消息:

Semantic issue: Error: Cannot initialize a variable of type "bool*" with an rvalue of type "void".
Run Code Online (Sandbox Code Playgroud)

c++ pointers boolean vector

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

使用 #ifdef 时的多个定义

我在编译时遇到问题:Multiple definitions of "myFunction()" 我将在这里大大简化问题。基本上,我有 3 个文件:“main”、“header”和“myLibrary”。

  • 主程序
    #include "header.hpp"

    int main() {  }
Run Code Online (Sandbox Code Playgroud)
  • 头文件.hpp
    #ifndef HEADER_HPP
    #define HEADER_HPP

    #include "myLibrary.hpp"

    // ...

    #endif
Run Code Online (Sandbox Code Playgroud)
  • 头文件.cpp
    #include "header.hpp"

    // ...
Run Code Online (Sandbox Code Playgroud)
  • myLibrary.hpp
    #ifndef LIB_HPP
    #define LIB_HPP

    #if defined(__unix__)
    #include <dlfcn.h>
    std::string myFunction() { return std::string(); }
    #endif

    #endif
Run Code Online (Sandbox Code Playgroud)
  • 我的图书馆.cpp
    #include "myLibrary.hpp"

    //...
Run Code Online (Sandbox Code Playgroud)

那么,为什么编译器说我有呢 Multiple definitions of "myFunction()"

我发现的一条线索:当我获取 header.cpp 并删除显示 的行时#include "header.hpp",程序编译时没有任何抱怨。另一方面,如果我删除myFunction(从 myLibrary.hpp 中),程序也可以毫无抱怨地编译

c++ definition include-guards

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

复制一个对象并使两者共享一个成员变量(C++)

我一直在思考和搜索这个,但我无法解决这个问题.我想要一个对象,当复制到另一个对象时,两个对象共享某个成员变量.因此,当我更改object1的成员变量的值时,它也会更改object2中的变量.例:

class ABC {
public:
    int a = 5;
    //...
}

int main() {
    ABC object1;

    ABC object2 = object1;

    object2.a = 7;      // now, object1.a is equal to 7
    object1.a = 10;     // now, object2.a is equal to 10
}
Run Code Online (Sandbox Code Playgroud)

我知道复制构造函数,但我不确定它是否适用于此处或者有更好的方法.我一直在考虑使用指针或引用,但不能成功.请注意,我不希望所有对象共享同一个变量.

c++ class copy-constructor member-variables

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

范围 [0, 255] 中的颜色与范围 [0, 1] 中的颜色不对应

我试图在我的着色器中实现一种从法线贴图读取法线的方法。然而,我在读取颜色时发现了一个问题,阻止了它。

我认为诸如 (0, 0, 255)(蓝色)这样的一种颜色相当于着色器中的 (0, 0, 1)。然而,最近我发现,例如,如果我传递颜色为 (128, 128, 255) 的纹理,它并不等于着色器中的 ~(0.5, 0.5, 1)。

在片段着色器中,我编写以下代码:

    vec3 col = texture(texSampler[0], vec2(1, 1)).rgb;   // texture with color (128, 128, 255)
    
    if(inFragPos.x > 0)
        outColor = vec4(0.5, 0.5, 1, 1);    // I get (188, 188, 255)
    else
        outColor = vec4(col, 1);            // I get (128, 128, 255)
Run Code Online (Sandbox Code Playgroud)

在 x<0 中,我得到颜色 (128, 128, 255),这是预期的。但在 x>0 中我得到了颜色 (188, 188, 255),这是我没想到的。我希望两种颜色是相同的。我不知道什么?我缺少什么?

glsl vulkan

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