相关疑难解决方法(0)

什么是"静态"功能?

问题是关于普通函数,而不是 static方法,正如评论中所阐明的那样.

好的,我理解static变量是什么,但什么是static函数?

为什么如果我声明一个函数,让我们说void print_matrix,让我们说a.c(WITHOUT a.h)和include "a.c"- 我得到"print_matrix@@....) already defined in a.obj",但是如果我声明它static void print_matrix然后它编译?

更新只是为了清理 - 我知道包括.c很糟糕,正如你们许多人指出的那样.我只是做它在暂时清除空间main.c,直到我有更好的想法如何将所有这些功能集成到适当.h.c文件.只是一个临时的快速解决方案.

c static terminology function

465
推荐指数
11
解决办法
55万
查看次数

具有静态链接的成员函数

我试图理解为什么以下是一个错误:

class Foobar {
 public:
  static void do_something();
};

static void Foobar::do_something() {} // Error!

int main() {
  Foobar::do_something();
}
Run Code Online (Sandbox Code Playgroud)

这个错误带有"错误:无法声明成员函数'静态void Foobar :: do_something()'在g ++中具有静态链接",并且"错误:'静态'只能在clang ++中的类定义中指定".

我理解解决这个问题的方法是在第6行的do_something定义中删除"static".但是,我不理解为什么这是一个问题.这是一个世俗的原因,例如"C++语法决定如此",还是更复杂的事情?

c++ static

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

C++ 中互斥体的单例类

我正在努力让这项工作正常进行,但似乎有一些我不完全理解的事情。

\n\n

我在一个文件中有一个多线程应用程序(2个类和我在其中创建线程和所有内容的真正的主程序)。我想分成3个文件。一个用于每个类(及其标题),一个用于主类。

\n\n

我有几个 mutices 和一个队列来在线程之间共享消息并随时锁定和解锁它们。

\n\n

我想编写一个单例类,以便所有类都可以共享互斥锁:

\n\n

标头:

\n\n
#ifndef COMMONSINGLETON_H\n#define COMMONSINGLETON_H\n\n#include <mutex>          // std::mutex\n#include <queue>\n\nclass CommonSingleton{\n    private:\n        static std::mutex               mutex_w_b;\n        //static std::mutex               mutex_wifi_ok;\n        //static std::queue <std::string> queue_w_b;\n\n    public:\n        static CommonSingleton& getInstance();\n        std::mutex GetMutexWB();\n        //std::mutex GetMutexWiFiOk();\n        //std::queue <std::string> GetQueueWB();\n    private:\n        CommonSingleton() {};\n        CommonSingleton(CommonSingleton const&);\n        void operator=(CommonSingleton const&);\n};\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 .cpp 文件:

\n\n
#include "commonsingleton.h"\n\nstatic CommonSingleton& CommonSingleton::getInstance(){\n    static CommonSingleton instance;\n    return instance;\n}\nstd::mutex CommonSingleton::GetMutexWB(){\n    return mutex_w_b;\n}\n/*std::mutex CommonSingleton::GetMutexWiFiOk(){\n    return mutex_wifi_ok;\n}\nstd::queue <std::string> CommonSingleton::GetQueueWB(){\n   return queue_w_b;\n}*/\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的主要内容中,我有这个来测试互斥体:

\n\n
CommonSingleton::getInstance().GetMutexWB.lock();\n
Run Code Online (Sandbox Code Playgroud)\n\n

但现在我评论了,只是为了弄清楚如何编译。这是我得到的错误: …

c++ multithreading mutex c++11

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

为什么c ++在函数定义中不接受静态关键字?

我有一个程序,其中类T具有静态函数.

static void T::func()
{
    m_i=10;
    cout<<m_i<<endl;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在函数定义中添加静态时,编译器抛出错误错误:无法声明成员函数'static void T :: func()'具有静态链接.为什么在定义中不接受静态关键字?

c++ static

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

标签 统计

c++ ×3

static ×3

c ×1

c++11 ×1

function ×1

multithreading ×1

mutex ×1

terminology ×1