gpt4 book ai didi

cpp 文件中的 C++ 值定义和额外限定

转载 作者:行者123 更新时间:2023-11-30 05:35:52 24 4
gpt4 key购买 nike

我正在用多线程编程模板矩阵。我需要我的矩阵能够使用此代码行(我无法更改,这是我的程序的要求):

Matrix<Complex>::setParallel(false);

所以对于这个并行(这是一个 bool 决定是否使用多线程)必须是静态的。

所以一开始我是这样定义的:

template<class T>
class Matrix
{
private:
...
public:
static bool parallel;
...
};

但是我得到了这个错误:

... undefined reference to 'Matrix<int>::parallel'

快速搜索后,我在堆栈溢出中找到了这个问题:Undefined reference to a static member

所以我继续说答案。所以我将代码更改为:

   template<class T>
class Matrix
{
private:
...
public:
static bool Matrix::paraller;
...
};

现在我得到这个错误:

extra qualification 'Matrix<T>::' on member 'paraller' [-fpermissive]

(注意:我也试过 static "bool Matrix::paraller;"相反,没有帮助。

现在我不知道如何在不再次返回 undefined reference 的情况下摆脱额外的限定错误。

如果这很重要,整个代码都在一个名为“Matrix.hpp”的文件中,我无法更改(我的项目的另一个需求)。

我该怎么办?

最佳答案

正确的静态类成员用法在这段代码中得到了最好的描述

struct A
{
static bool concurrent;
};

A::concurrent = false;

或者,如果成员是 const

struct B
{
static const bool concurrent = false;
};

指定template 静态类成员完全相同。有一件事出来了:静态成员初始化必须在声明范围内可用。这意味着,您不能将声明与实现分离 - 它们必须完全在同一个程序单元中。然而,这是每个模板单元的共同要求,无论它是对象、函数等。

因此,创建一个非常量模板静态类成员就是这样执行的

template <typename T, typename U, typename... Rest>
struct TemplateStruct
{
static U variable;
}

template <typename T, typename U, typename... Rest>
TemplateStruct<T, U, Rest...>::variable = U();

U 可以是你想要的任何类型,同时它有一个默认构造函数

关于cpp 文件中的 C++ 值定义和额外限定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com