我最近遇到过这个问题。我发现很多人都在问这个问题 - here, for example - 但没有具体答案。
以下是该链接提升的示例代码:
class AFX_BASE_APPLICATION_APP_CLASS CFileExtension
{
public:
CFileExtension ();
virtual ~CFileExtension ();
};
产生的错误是:
c:\FileExtension.h(14) : error C2470: 'CFileExtension' : looks like a function definition, but there is no formal parameter list; skipping apparent body
答案 0 :(得分:38)
你几乎肯定错过了定义AFX_BASE_APPLICATION_APP_CLASS
的标题。在这种情况下,它将通过不变的方式传递,VC ++会认为CFileExtension
是一个返回class AFX_BASE_APPLICATION_APP_CLASS
的函数。
并且,因为它认为它是一个函数,它也认为它需要括号。
您只需找到AFX_BASE_APPLICATION_APP_CLASS
定义的位置和#include
该文件。
答案 1 :(得分:6)
我遇到了相同的编译器错误。问题是缺少冒号
我的代码类似于:
int MyClass:doSomething() {
}
应该是:(注意'::'而不是':'
int MyClass::doSomething() {
}
答案 2 :(得分:4)
...和答案,因为我无法为任何这些论坛登录,但我已经有了一个OpenID: - )
在我的情况下(可能是我发现的所有),问题是我错过了包含类名前面的宏定义的头文件的#include。该宏很可能用作构建配置切换方式来打开__declspec(dllexport)。
我发现这一点的方法是进入项目属性“C / C ++”|预处理器并打开“生成预处理文件”。当我查看预处理的输出时,我发现宏是逐字包含的,而不是被扩展。
答案 3 :(得分:3)
只需定义AFX_BASE_APPLICATION_APP_CLASS
答案 4 :(得分:0)
另一个可能的原因是在Visual C ++中使用__declspec(dllimport)而不是__declspec(dllexport)或者根本没有使用declspec作为类/函数前缀。
如果你混淆了这一点,那么你的课程也可能无法被识别,你也会得到同样的错误。
答案 5 :(得分:0)
我遇到了同样的问题,没有一个解决方案有效。 OP中发布的问题来自于包括类:
class AFX_EXT_CLASS CMyClass : public CObject
{
public :
// ....
}
这是我想在控制台exe中使用的dll的导出类。如果我创建控制台应用程序为'使用mfc'在创建向导中,然后这个 错误没有发生,但该选项导致创建不同的应用程序结构。
无论如何我试图包含各种标题,因此它知道AFX_EXT_CLASS
,定义它但没有任何效果。简而言之,解决方案是我们必须启用MFC应用程序才能从dll中了解MFC导出的类。我们如何操作是通过编辑.vcproj
文件并插入行UseOfMFC="2"
,如下所示:
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="2" <-------------Insert this line here
CharacterSet="1"
同样#include <afx.h>
到stdafx.h(我在第一次包含之前将其包含在右上角)。
现在重新添加,清理并构建错误应该消失。
没有其他方法可以从项目设置中更改此选项。此选项不同于项目属性&gt;&gt;配置属性&gt;&gt;一般&gt;&gt; &#39;使用MFC&#39; 。
<强>更新强>
UseOfMFC="2"
技巧可能在其他地方很有用,但显然如果你只是#include <afx.h>
并将设置project properties >> General >> 'Use of MFC'
更改为在共享dll中使用MFC,那么这个错误就会消失。如果您没有更改以后的设置,则会发生编译错误
c:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
更改它实际上也会在项目文件中设置UseOfMFC="2"
,所以这是正确的方法。