相关疑难解决方法(0)

静态类成员上未解析的外部符号

非常简单地说:

我有一个主要由静态公共成员组成的类,所以我可以将类似的函数组合在一起,但仍然需要从其他类/函数中调用它们.

无论如何,我在我的类公共范围中定义了两个静态unsigned char变量,当我尝试在同一个类的构造函数中修改这些值时,我在编译时遇到"未解析的外部符号"错误.

class test 
{
public:
    static unsigned char X;
    static unsigned char Y;

    ...

    test();
};

test::test() 
{
    X = 1;
    Y = 2;
}
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,所以对我很轻松.为什么我不能这样做?

c++ static class members

122
推荐指数
5
解决办法
12万
查看次数

函数静态变量是否在GCC中是线程安全的?

在示例代码中

void foo()
{
  static Bar b;
  ...
}
Run Code Online (Sandbox Code Playgroud)

使用GCC编译是否可以保证b以线程安全的方式创建和初始化?

在gcc的手册页中,找到了-fno-threadsafe-statics命令行选项:

不要发出额外的代码来使用C++ ABI中指定的例程来进行本地静态的线程安全初始化.您可以使用此选项在不需要线程安全的代码中略微减小代码大小.

  1. 这是否意味着,默认情况下,GCC的本地静态是线程安全的?所以没有理由明确保护,例如pthread_mutex_lock/unlock

  2. 如何编写可移植代码 - 如何检查编译器是否会添加其防护?或者关闭GCC的这个功能是否更好?

c++ static gcc initialization thread-safety

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

为什么"static"关键字在C和C++中有这么多含义?

众所周知,关键字在C语言中static多重含义 .C99增加了合法写作的可能性

void foo (int arr[static 50])
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这增加了混乱,而C++有静态成员变量和函数.

如果可以以某种方式连接所有用途,这不会那么麻烦,但我发现很难找到某些情况的链接.特别是为什么static关键字应该用于修改可见性(链接),或者它究竟与数组的最小元素数量有关.

那么滥用static关键字是否存在历史原因,或者是否存在连接其所有用途的秘密链接?

c c++ static keyword

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

初始化全局变量类

对这样一个基本问题道歉,但我无法弄清楚.我知道你可以像这样初始化一个类:

QFile file("C:\\example");
Run Code Online (Sandbox Code Playgroud)

但是,您如何从全局变量初始化它?例如:

QFile file; //QFile class

int main()
{
    file = ?? //need to initialize 'file' with the QFile class
}
Run Code Online (Sandbox Code Playgroud)

c++ class

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

标签 统计

c++ ×4

static ×3

class ×2

c ×1

gcc ×1

initialization ×1

keyword ×1

members ×1

thread-safety ×1