问题标签 [static-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
42 浏览

c++ - C++ 使用来自另一个头文件的静态类函数,“class_name”尚未声明

编辑:感谢您为我指出循环依赖的正确方向。我尝试从Mathfg.h中删除#include "datastructure.h",并在 "Matfg.h" 中添加了一个 "Class ArithmeticTree" 来转发声明它,但在 CleanExpression 函数中出现另一个错误: 无法转换 'std:: __cxx11::basic_string::iterator {aka __gnu_cxx::__normal_iterator >}' to 'const char*' for argument '1' to 'int remove(const char*)'。当我将鼠标悬停在“删除”一词上时,Qt 告诉我“参数太多”。这是 Calculator::CleanExpression 包含的一行代码。

我正在编写一个数学解析器,并创建了一个头文件Mathfg,其中包含一个处理输入的Calculator类。到目前为止,我有一个名为CleanExpression的静态函数,它只是从输入字符串中删除空格。

我在这里看到了一个有点类似的问题:Static function declared but not defined in C++,但我无法将那里的答案应用于我自己的问题。

(我省略了一些不相关的部分,例如Node结构的实现,但除了CleanExpression调用之外,一切都有效。)

Mathfg.h

注意:我不使用 Mathfg.h 的源文件。

数据结构.h

在另一个标题"Datastructure.h"中,我修复了输入并产生了输出。我想从"Mathfg.h"调用静态函数CleanExpression,但出现错误:'Calculator' has not been declared

注意:我不使用 Datastructure.h 的源文件。

有什么作用

在我的游戏循环中,我可以成功运行以下代码:

...输出:

...但是当我尝试从“Datastructure.h”中调用Calculator::CleanExpression - 或者更具体地说,从ArithmeticTree的构造函数中调用时 - 我得到了上述错误。我从未在我的代码中的任何地方创建过CalculatorMathfg对象;我只是调用它的静态函数,就像我通常期望它的行为一样。 我确定我误解了静态函数在 C++ 中的工作方式,这可能也是我的错误的原因。 我真的很想要一些关于如何解决这个问题的提示! 我正在使用Qt Creator 4.2.1MinGW 5.3.0 32bit2





0 投票
1 回答
487 浏览

c++ - C++类静态成员函数调用错误

我用视觉工作室写了一个项目。在项目中,我构建了一个名为 CSimApplianceDlg 的类,它有两个成员:

static UINT RecvDataFrame(LPVOID pParam)CSerialPort m_Port

CSerialPort有一个公共成员函数WriteToPort通过串口发送数据。

我打了电话

m_Port.WriteToPort(m_SendData,len);

在 UINT CSimApplianceDlg::RecvDataFrame(LPVOID pParam) 中。但是,在构建项目时,就在调用的那一行,我得到了

1>e:\mysourcecode\smarthome\simappliance\simappliance\simappliancedlg.cpp(557):错误 C2228:'.WriteToPort' 左侧必须有类/结构/联合
1>e:\mysourcecode\smarthome\simappliance\simappliance\simappliancedlg .cpp(557) : 错误 C2597: 非法引用非静态成员 'CSimApplianceDlg::m_SendData'
1>e:\mysourcecode\smarthome\simappliance\simappliance\simappliancedlg.cpp(557) : 错误 C2597: 非法引用非静态成员 'CSimApplianceDlg::len'

我该如何处理这些错误?并且WriteToPort被称为,因为我不熟悉LPCTSTR

0 投票
2 回答
61 浏览

c - 在C语言中,如何使用非当前文件的静态函数?

fileA.c 有一个静态函数 (static int funcA())

无法修改 fileA.c。

fileB.c 如何使用 funcA()?

0 投票
0 回答
56 浏览

reactjs - ES6 中的静态函数是否可以替代 React 中使用的 Mixin?

我是反应新手。有人可以解释为什么在没有任何 mixin 支持的情况下启动 ES6。因为,当您将 React 与 ES6 类一起使用时,不支持 mixins。
我们可以在 React 中使用静态函数而不是 Mixins 来做同样的事情吗?

0 投票
2 回答
446 浏览

c - C中“静态”函数关键字与返回类型说明符的顺序

希望这不是与 C 中“静态”函数的含义相关的许多其他问题的重复。

我们支持一些遗留的本地 C 代码,其中包含以下内容......(不要问我为什么要 VOID/void)

据推测,预处理器将后者转换为

编译器(Visual Studio 2015,可能是相对普通的标志/设置,警告级别 W3)对此似乎很好,即使我的阅读是“静态”应该出现在返回类型说明符之前,即

这些在语法上是否等效并且都正确?如果不是,为什么编译器接受前一种可能不正确的语法?

编辑 1

感谢您到目前为止的回答。有趣的是,我不确定它们是否 100% 等效并且在所有情况下都可以接受,ala:

0 投票
2 回答
1724 浏览

c++ - 将函数引用设置为其他 c++ 文件中的非静态函数

我正在尝试在 C++ 中设置非静态函数的引用。我引用的函数不是来自同一个 c++ 文件,我得到错误提示:

无法创建指向成员函数的非常量指针。

主文件

测试.hpp

我的问题是如何在不将测试类中的更新设置为静态的情况下做到这一点?

使用此代码它可以工作,但就像我说过的那样,我不希望这个函数是静态的。

编辑: 因为我很愚蠢,所以我没有提到班级测试应该能够有所不同。同样对于我已经得到的答案,我了解到 tc.update = &t.update; 是错的。

例如 :

我现在得到的错误是。

另一件事是我正在使用 XCode 进行编程,我相信它使用 LLVM-GCC 4.2 作为编译器。

0 投票
0 回答
47 浏览

android-studio - 在 Android Studio 中使用 CMake 将静态函数包含到符号表中

我需要从 android NDK 项目的反汇编库中获取所有 C/C++ 函数名称。现在我只看到不是静态函数。是否有可能在符号表中包含静态函数?

我正在使用 Android Studio 和 CMake 3.6。

0 投票
1 回答
249 浏览

c++ - this 在静态成员函数中的未评估上下文中

为什么this不允许在静态成员函数的未评估上下文中使用?

此代码给出错误:

错误:“this”对于静态成员函数不可用

decltype(this)需要简洁(有时它更短,然后VeryVeryLongClassName *),另一个优点是意图更清楚。

this关于在静态成员函数中未评估的上下文中使用的标准是什么?

0 投票
3 回答
81 浏览

javascript - 无法在自己的类中调用静态函数

如何在类本身内部调用静态函数?我尝试使用 self 关键字而不是这个,但我仍然得到错误。

0 投票
0 回答
89 浏览

c++ - 是否值得将函数声明为静态?

在 C 或 C++ 中,static如果函数仅用于单个翻译单元(即文件),则可以将其声明为,例如:

这应该允许编译器更好地优化它。虽然它有点丑(编辑:对丑陋的看法可能会有所不同;这个问题与此无关),如果我不需要,我宁愿不必这样做。它真的有多大的不同?

  1. 它会影响编译时间吗?
  2. 调用可能是的非static函数的开销是static多少?
  3. 链接器能否识别出它仅在一个文件中使用并自动将其转回static函数(可能使用-flto或 ThinLTO?)。

编辑:欢迎任何架构和编译器的答案,但显然更常见的答案更有帮助(Clang,x86-64)。