g++ 相关问题

g ++是GNU编译器集合(gcc)的C ++前端。

在 Ubuntu 22.04 上构建 Unikey 的问题

我正在尝试按照 Unikey Linux 页面上的说明在 Ubuntu 22.04 上安装 Unikey(用于输入越南语的程序)。运行 ./configure 成功时,我遇到了错误

回答 1 投票 0

使用 vcpkg 在 Windows (MSYS2) 上将 Google Benchmark 与 g++ 链接的问题

我正在尝试在 Windows 上使用 Google Benchmark 和 g++ 编译器。我使用 vcpkg 包管理器和三元组 x64-mingw-static 安装了该库。 这是我用来安装的命令...

回答 1 投票 0

std::mutex 编译 RPi Pico (CMake) 时出现错误

我已经研究这个问题几天了,似乎无法在任何在线论坛/文档中找到答案。 这就是我正在做的事情:我有一个 RPi 3B 通过 USB 连接到 RPi Pico(ac...

回答 1 投票 0

gcc:无法执行“cc1plus”

我刚刚下载了 C++ 编译器 MinGW,检查了 MinGW Installation Manager 中的所有内容,并将其放入位置。但是当我在我的 C++ 编译器之一中测试编译器时,我得到了

回答 2 投票 0

从 gcc/clang 检索编译时已知的值

考虑以下定义的编译时间常数 VALUE struct foo { uint32_t a; }; 静态 constexpr int VALUE = sizeof(foo); 请注意,计算值的方式并不重要...

回答 3 投票 0

静态成员是否允许重复初始化?

我尝试用 Clang 编译下面的代码 普拉松班{ 静态常量 int 虚拟 = 0; }; int const Prasoon::dummy = 0; int main(){} 上面的代码在编译时没有给出任何错误...

回答 2 投票 0

如何将g++配置为Mac OS(M1)中的默认编译器

所以,我想使用一些 GNU C++ 原生的头文件: #包括 #包括 我读到在 MacOS 中,gcc 和 g++ 都是链接的......

回答 2 投票 0

为什么 GCC 会将这个向量构造函数的参数转发给所包含类型的构造函数,而 Clang 却不会?

考虑以下虚拟类型: 结构体Foo{ Foo(int x) : x{x}{} 模板 Foo(R r) : x{std::accumulate(r.begin(), r.end(), 0, [](int x, const auto& foo){return x ...

回答 1 投票 0

无法使用std编译源

当尝试编译打印“Hello World!”的源代码时使用 std::cout 编译器失败。 我有这个你好世界源代码 #包括 使用命名空间 std; 在...

回答 1 投票 0

“to_string”不是“std”的成员?

好的,所以我有 tmp.cpp: #包括 int main() { std::to_string(0); 返回0; } 但是当我尝试编译时我得到: $ g++ tmp.cpp -o tmp tmp.cpp:在函数‘int main()’中: TM...

回答 3 投票 0

std::atexit 函数在 MSVC 编译器中不起作用吗?

我想在退出程序时运行一个带参数且返回值为void的函数。我使用以下代码来实现它: #包括 #包括 使用

回答 1 投票 0

致命错误:使用 x86_64-w64-mingw32-gcc 时无法执行 cc1 execvp”

我正在尝试使用以下命令编译文件: x86_64-w64-mingw32-gcc反向.cpp -o反向.exe -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-con...

回答 1 投票 0

错误:矩阵相乘时没有用户提供的默认构造函数

我有一些非常基本的代码,我认为不会导致问题: #包括 ... mat4x4 m = mat4x4(1.0f); m = 旋转(m, (浮动) glfwGetTime(), vec3(0.0f, 0.0f, 1.0f)); 我...

回答 1 投票 0

C++ 编译器在宏扩展中存在模板参数问题

我对 g++ 和 clang++ 进行了测试,并在今天早些时候编写一些单元测试时经历了这一点,并得出了 MWE: #定义 EXPECT_EQ(A, B) 模板 C类{

回答 1 投票 0

Make 省略 '-I' 标志 g++

我有一个 makefile 来制作一个包含 2 个源文件和一个标头的项目。 .PHONY:干净删除运行 CC = g++ CFLAGS = -g -墙 CXXFLAGS = $(CFLAGS) SRC = /home/user/dev/nCPrograms/Flagger/src/theclass...

回答 1 投票 0

SDL2/_real_SDL_config.h:没有这样的文件或目录

我一直在尝试在 WSL (Ubuntu) 上设置 SDL2 并使用 cmake 和 mingw 交叉编译到 Windows。我遇到了这个问题,尝试编译库文件本身失败: 在文件中

回答 3 投票 0

在 C++ 中使用模板更改运算符顺序时出错

我正在编写以下模板化向量类。 矢量.h: #ifndef INCLUDE_HEADERS_VECTORS_H #define INCLUDE_HEADERS_VECTORS_H 模板 类 Vector2D; 模板 我正在编写以下模板化向量类。 向量.h: #ifndef INCLUDE_HEADERS_VECTORS_H #define INCLUDE_HEADERS_VECTORS_H template<class Scalar> class Vector2D; template<class Scalar> Vector2D<Scalar> operator+(Scalar a, Vector2D<Scalar> v); template<class Scalar> class Vector2D { public: Vector2D(); Vector2D(Scalar a, Scalar b); Scalar getX(); Scalar getY(); Vector2D<Scalar> operator+(Scalar a); friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); private: Scalar x, y; }; #endif 向量.cpp: #include<headers/vectors.h> template<class Scalar> Vector2D<Scalar>::Vector2D() { x = 0; y = 0; } template<class Scalar> Vector2D<Scalar>::Vector2D(Scalar a, Scalar b) { x = a; y = b; } template<class Scalar> Scalar Vector2D<Scalar>::getX() { return x; } template<class Scalar> Scalar Vector2D<Scalar>::getY() { return y; } template<class Scalar> Vector2D<Scalar> Vector2D<Scalar>::operator+(Scalar a) { return Vector2D<Scalar>(a + x, a + y); } template<class Scalar> Vector2D<Scalar> operator+(Scalar a, Vector2D<Scalar> v) { return Vector2D<Scalar>(a + v.x, a + v.y); } template class Vector2D<float>; template Vector2D<float> operator+<float>(float a, Vector2D<float> v); 主要.cpp: #include<headers/vectors.h> #include<iostream> int main(int argc, char* argv[]){ Vector2D<float> a(1.0, 3.0); std::cout<<a.getX()<<" "<<a.getY()<<std::endl; a = (float)2.0 + a; std::cout<<a.getX()<<" "<<a.getY()<<std::endl; a = a + (float)-2.0; std::cout<<a.getX()<<" "<<a.getY()<<std::endl; return 0; } 当我尝试在 Windows 上使用 g++ 编译它时,出现以下错误: g++ -Iinclude -Iinclude/SDL2 -Iinclude/headers -Llib -o Main src/*.cpp -lmingw32 -lSDL2main -lSDL2 -lSDL2_image In file included from src/Main.cpp:2: include/headers/vectors.h:29:33: error: declaration of 'operator+' as non-function 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^~~~~~~~ include/headers/vectors.h:29:41: error: expected ';' at end of member declaration 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^ | ; include/headers/vectors.h:29:43: error: expected unqualified-id before '<' token 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^ In file included from src/vectors.cpp:1: include/headers/vectors.h:29:33: error: declaration of 'operator+' as non-function 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^~~~~~~~ include/headers/vectors.h:29:41: error: expected ';' at end of member declaration 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^ | ; include/headers/vectors.h:29:43: error: expected unqualified-id before '<' token 29 | friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); | ^ src/vectors.cpp:70:18: error: non-class, non-variable partial specialization 'operator+<Scalar>' is not allowed 70 | Vector2D<Scalar> operator+<Scalar>(Scalar a, Vector2D<Scalar> v) { | ^~~~~~~~~~~~~~~~~ src/vectors.cpp: In instantiation of 'Vector2D<Scalar> operator+(Scalar, Vector2D<Scalar>) [with Scalar = float]': src/vectors.cpp:96:69: required from here src/vectors.cpp:71:35: error: 'float Vector2D<float>::x' is private within this context 71 | return Vector2D<Scalar>(a + v.x, a + v.y); | ~~^ include/headers/vectors.h:37:16: note: declared private here 37 | Scalar x, y; | ^ src/vectors.cpp:71:44: error: 'float Vector2D<float>::y' is private within this context 71 | return Vector2D<Scalar>(a + v.x, a + v.y); | ~~^ include/headers/vectors.h:37:19: note: declared private here 37 | Scalar x, y; | ^ mingw32-make: *** [MakeFile:2: all] Error 1 但是,如果我更改 vectors.h 中 + 运算符声明的顺序,如下所示,它将正常工作。 #ifndef INCLUDE_HEADERS_VECTORS_H #define INCLUDE_HEADERS_VECTORS_H template<class Scalar> class Vector2D; template<class Scalar> Vector2D<Scalar> operator+(Scalar a, Vector2D<Scalar> v); template<class Scalar> class Vector2D { public: Vector2D(); Vector2D(Scalar a, Scalar b); Scalar getX(); Scalar getY(); friend Vector2D<Scalar> operator+ <>(Scalar a, Vector2D<Scalar> v); Vector2D<Scalar> operator+(Scalar a); private: Scalar x, y; }; 我完全不知道为什么会发生这种情况。 我尝试删除模板,问题消失了,所以它一定是相关的。 一般来说,模板函数的定义不应放在单独的 .cpp 文件中。相反,它们应该在模板中的 .h 文件中定义。这个答案消除了 .cpp 文件。 这避免了到处不断重复template< typename Scalar >的麻烦。更重要的是,它允许编译器自动内联它们。 此外,operator+还有一个习惯用法,即首先定义operator+=,然后将operator+实现为隐藏好友,从而调用operator+=。见下文。 // vectors.h #ifndef INCLUDE_HEADERS_VECTORS_H #define INCLUDE_HEADERS_VECTORS_H template<class Scalar> class Vector2D { Scalar x{}; // default member-initialization sets x to 0 Scalar y{}; // default member-initialization sets y to 0 public: Vector2D() = default; Vector2D(Scalar a, Scalar b) : x{ a } // use base-member initization, rather than assignment. , y{ b } {} Scalar getX() const // "getter" function declared with const { return x; } Scalar getY() const // "getter" function declared with const { return y; } // Compound assignment operator returns a reference to `this` object. // Within its definition, class template `Vector2D` does not need // a template argument. Avoid `Vector2D<Scalar>`. Vector2D& operator+= (Vector2D const& v) { x += v.x; y += v.y; return *this; } // Use hidden friend idiom to define `operator+`. // Left operand is a value parameter. friend Vector2D operator+ (Vector2D a, Vector2D const& b) { return a += b; } // As before, compound assignment operator returns a reference to // `this` object. Within its definition, class template `Vector2D` // does not need a template argument. Avoid `Vector2D<Scalar>`. Vector2D& operator+= (Scalar a) { x += a; y += a; return *this; } // Provide two versions of `operator+` for Scalar operand. // That way, the Scalar can appear on either side of the `+` sign. // Once again, these are hidden friends. // The vector is passed by value. friend Vector2D operator+ (Scalar const a, Vector2D v) { return v += a; } friend Vector2D operator+ (Vector2D v, Scalar const a) { return v += a; } }; #endif // end file: vectors.h 输出 文件main.cpp与OP相比没有变化。 1 3 3 5 1 3

回答 1 投票 0

当我尝试使用 g++ 进行编译并且使用 macOS 时,我收到有关构造函数的错误:没有匹配的构造函数用于初始化[关闭]

我有一个完全正常的代码(一个 cpp 和一个 cpp 文件)和一个 makefile,但是当我尝试用 g++ 编译它时,我得到这个: g++ -std=c++11 -c subject.cpp -o subject.o 在主题包含的文件中......

回答 1 投票 0

为什么 g++ 即使使用 C++11 也无法识别 stoi?

我在C++11中有这个函数: 布尔 ccc(常量字符串 cc) { 矢量数字; 国际辅助; for(int n = 0; n < cc.length(); ++n) { digits.push_back(to_string(cc[n])); } ...

回答 1 投票 0

当我尝试使用 g++ 编译时出现此错误

我有一个完全正常的代码(一个 cpp 和一个 cpp 文件)和一个 makefile,但是当我尝试用 g++ 编译它时,我得到这个: g++ -std=c++11 -c subject.cpp -o subject.o 在主题包含的文件中......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.