小编nih*_*hit的帖子

为什么g ++找不到-I include-path中的预编译头?

我正在尝试构建一个预编译的标头和一个可执行文件,如下所示:

g++ -g -Wall -std=c++17 \
    -c ./src/pch.hpp -o ./build/pch.hpp.gch

g++ -g -Wall -std=c++17 \
        -c ./src/*.cpp  \
        -I./build/ -include pch.hpp
Run Code Online (Sandbox Code Playgroud)

pch.hpp.gch文件被正确地创建。但是对于每个.cpp文件,我都会收到以下错误:

1 error generated.
<built-in>:1:10: fatal error: 'pch.hpp' file not found
#include "pch.hpp"
Run Code Online (Sandbox Code Playgroud)

我认为根据gcc Precompiled Headers文档,我的编译行是正确的:

  • -I./build/告诉它将build目录添加到include搜索路径。
  • -include pch.hpp#include <pch.hpp>每个文件前添加指令。
  • 编译器.gch为其每个#include指令搜索带后缀的预编译头。

为什么我的编译行无法按预期运行?


我尝试过的某些方法确实可以给我带来更好的结果,但对我来说看起来并不正确。

如果我修改include来搜索.gch文件,则会找到该文件,与我期望的一致。即-include pch.hpp.gch,而不是-include pch.hpp
但是随后,PCH被解释为二进制文件,并且编译失败:

g++ -g -Wall -std=c++17 \
        -c ./src/*.cpp  \
        -I./build/ …
Run Code Online (Sandbox Code Playgroud)

g++ precompiled-headers pch

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

在 mstest 中设置测试套件的超时

有没有办法为 mstest 中的整个测试套件设置超时,或者仅为单个测试设置超时?IE,如果我希望套件 X 中的测试总运行时间不超过 2 分钟,我该怎么做?

c# mstest timeout visual-studio

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

如何使 consteval 函数失败?

我有以下功能:

template <size_t TSize>
consteval size_t indexOf(SomeEnum someEnum,
                         const std::array<SomeEnum, TSize> &arr) {
  for (size_t i = 0; i < TSize; ++i) {
    if (arr[i] == someEnum) {
      return i;
    }
  }
  // How to fail here?
  return SOME_DEFAULT_WRONG_VALUE;
}
Run Code Online (Sandbox Code Playgroud)

该函数应该失败而不是返回默认值,但我不能抛出异常或调用assert. 我可以static_assert在每次调用函数时添加一个(使用宏它会不那么可怕),但我更喜欢在函数中工作的解决方案。在这种情况下有没有办法触发编译失败?

c++ c++20 consteval

4
推荐指数
2
解决办法
171
查看次数

Makefile:目标依赖项声明中特定于目标的变量

我正在尝试编写一个使用特定于目标的变量的 makefile,但是虽然在每个目标和先决条件主体中正确设置了变量,但先决条件列表本身并未使用该变量进行更新,从而导致检查和检查错误的先决条件叫。

如何也更新先决条件中特定于目标的变量?

在下面的示例中, 和make foomake bar应该打印“world”,但make foo打印“hello”。

X=hello

hello:
    echo "hello"

world:
    echo "world"

foo:X=world
foo:$(X)

bar:X=world
bar:
    make $(X)
Run Code Online (Sandbox Code Playgroud)

我试图实现的目标是,通过将文件夹作为特定于目标的变量传递,不同的目标将构建类似的先决条件 - 相同的文件,在不同的文件夹中。问题是,如下例所示,如果第一个目标被调用(foo在示例中为 ),则调用第二个目标不会执行任何操作。

DIR=fooDir
FILE=$(DIR)/filename

$(FILE):
    touch $(FILE)
    echo $(FILE)

foo: $(FILE)

bar:DIR=barDir
bar: $(FILE)
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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

c#将对象报告为null,否则为null

当我在调试模式下运行我的程序时,它会在非空的对象上弹出NullReferenceException - 它显示为Locals视图中定义的.有问题的对象是SFML.Graphics.Sprite,其中只有一个字段为null(myInverseTransform),但是当我检查其他Sprite时,它们也是null.

有谁知道是什么导致这种情况,或者我怎样才能找到异常引用的空对象是什么?

这是它的图片

相关代码:

这是代码:

(在雪碧:)

public void Draw(RenderTarget target, RenderStates states)

{

    states.Transform *= Transform;

    RenderStates.MarshalData marshaledStates = states.Marshal();

            if (target is RenderWindow)
            {
                sfRenderWindow_drawSprite(((RenderWindow)target).CPointer, CPointer, ref marshaledStates);
            }
            else if (target is RenderTexture)
            {
                sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
            }
        }
Run Code Online (Sandbox Code Playgroud)

(在变换:)

        public static Transform operator *(Transform left, Transform right)
        {
            return new Transform(left).Combine(right);
        }

        public Transform Combine(Transform transform)
        {
            sfTransform_combine(CPointer, transform.CPointer);
            return this;
        }
            else if (target is RenderTexture)
            {
                sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 nullreferenceexception sfml

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

查找模板相等运算符

我想编写一个代理类,该类具有模板值,并且可以与可以与模板进行比较的任何类进行比较。

template <class T>
class Proxy {
public:
  Proxy(T value) : _value(value) {}

  template <class U> // this should exist only if the T == U operator is defined
  bool operator==(U const& other) const  { return _value == other; }

  template <class U> // this should exist only if U == T is defined
  friend bool operator==(U const& first, Proxy<T> const& second) const  { return first == second._value; }

private:
  T _value;
};
Run Code Online (Sandbox Code Playgroud)

例如,由于这是合法代码:

bool compare(std::string first, std::string_view second) { …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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