C++ C++;类型定义错误
编译器说:1>----构建已启动:项目:klstart,配置:调试Win32------ 1> HTTPReader.cpp 1> c:\u\admin\visual studio 2010\projects\klstart\klstart\httpreader.cpp(100):错误C2065:“InternetConnect”:未声明的标识符 1> c:\u\admin\visual studio 2010\projects\klstart\klstart\httpreader.cpp(100):错误C2146:语法错误:缺少“;”在标识符“helper”之前 我写错了什么?尝试使用C++ C++;类型定义错误,c++,visual-studio,typedef,C++,Visual Studio,Typedef,编译器说:1>----构建已启动:项目:klstart,配置:调试Win32------ 1> HTTPReader.cpp 1> c:\u\admin\visual studio 2010\projects\klstart\klstart\httpreader.cpp(100):错误C2065:“InternetConnect”:未声明的标识符 1> c:\u\admin\visual studio 2010\projects\klstart\klstart\httpreader.cpp(10
#include
或者尝试使用struct,会更简单,更容易理解,出错的机会更少 您忘了将
if
的真正分支包装到复合语句中
基本上,问题与这段代码中的问题相同
bool CInetWrapper::OpenFtpConnection (LPCTSTR lpszServerName)
{
// internetconnect(inet_open,'ftp.site.ru',port,'login','pass',INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
if (OpenInternet() && m_hConnection == NULL)
// (HINTERNET,LPCSTR,INTERNET_PORT,LPCSTR,LPCSTR,DWORD,DWORD,DWORD);
typedef HINTERNET (__stdcall* InternetConnect_)(HINTERNET,LPCSTR,INTERNET_PORT,LPCSTR,LPCSTR,DWORD,DWORD,DWORD);
InternetConnect_ ic = (InternetConnect_)helper.GetProcAddressEx("wininet.dll", "InternetConnectA");
m_hConnection = ic(
m_hInternet,
lpszServerName? lpszServerName:
m_lpszServerName? m_lpszServerName: "localhost",
INTERNET_DEFAULT_FTP_PORT,
m_login,
m_password,
INTERNET_SERVICE_FTP,
0,
0);
return CheckError(m_hConnection != NULL);
}
在上面这个简单的例子中,虚构的“作者”想要这样做
if (some_condition)
typedef int MyType;
MyType i; // ERROR: `MyType` is undeclared identifier
...
但是他忘了把那些{}
放在那里,结果是完全不同的东西。你在代码中犯了同样的错误
由于您没有在if
之后创建复合语句(使用{}
),因此if
的真正分支中包含的唯一部分是您的typedef
,没有其他内容。带有唯一typedef
的分支是一个单独的局部作用域,它在if
之后立即结束。这意味着在您的if
typenameInternetConnect\uu
之后,将不再知道
要么将您的
typedef
放在if
之前,要么将真正的分支包装成一对{}
从您发布的内容中无法得到有意义的解释。不管是什么原因造成的,它都在别的地方。提供更多的上下文。通过ic
的调用是否真的在声明ic
后立即进行,如上述代码所示?我有点怀疑它(代码对齐方式不同…)我正在添加这个头,但没有任何更改:(.不编译。此代码运行typedef BOOL(_stdcall*InternetCloseHandle)(HINTERNET);InternetCloseHandle\uinternetclosehandle=(InternetCloseHandle)helper.GetProcAddressEx(“wininet.dll”,“InternetCloseHandle”);if(m_HINTERNET)\u InternetCloseHandle(m_hInternet),;
if (something)
{
typedef int MyType;
MyType i;
...
}