C ++ typedef错误

时间:2012-10-27 18:24:49

标签: c++ visual-studio typedef

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);
}

和编译器说:1> ------ Build build:Project:klstart,Configuration:Debug Win32 ------ 1 GT; 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:语法错误:缺少';'在标识符“帮助者”之前 我写错了什么?

2 个答案:

答案 0 :(得分:2)

您忘记将if的真分支包装成复合语句。

基本上,问题与这段代码中的问题相同

if (some_condition)
  typedef int MyType;
  MyType i; // ERROR: `MyType` is undeclared identifier
  ...

在上面的简单例子中,想象中的“作者”想要这样做

if (something)
{
  typedef int MyType;
  MyType i; 
  ...
}

但是他忘了把那些{}放在那里,结果却完全不同了。你在代码中犯了同样的错误。

由于您未在if之后创建复合语句(使用{}),因此if的真正分支中包含的唯一部分是typedef没有别的。具有唯一typedef的分支是一个单独的本地范围,在if之后立即结束。这意味着在您的if类型名称InternetConnect_不再为人所知之后。

typedef放在if之前,或将真正的分支包装成一对{}

答案 1 :(得分:-1)

尝试使用#include <cstdlib>

或尝试使用struct,会更简单易懂,更少出错。