-1

我正在编写 clsLog 类:

// This is the main DLL file.

#include "stdafx.h"

#include <time.h>

#include <fstream>
#include <iostream>
#include <string>

#include "clsLog.h"


std::string     m_strCurLogUser; 
int         m_iCurLogAction;        
int         m_iCurLogLevel;     
std::ofstream           m_oCurLogFile;

// 
// LogInit
// Initilize the log parameters of the system.
// The FileName will be the file name that the system will log the messages (LOG.TXT is the default if no names are given).
// The DatabaseName and TableName specifies the database and table name to be used for log. The default is "LOG_DATABASE" and "LOG_TABLE"
// will be done.
// The Action shall be an OR with all the options. Att: If an option is giver (ex: Database) and an invalid name is given, then an error will occur.
//
// The default log level is zero (0). So every log with a level upper than that will be logged. A change to the level must be done 
// using the SetLogLevel method.
//
// return = 0: Success
//      1: Failure
//
int LogInit (std::string FileName,      // Initialize the log file/connection.
             std::string DatabaseName,  // Database name to connect to.
             std::string TableName,     // Table name to connect to.
             std::string UserName,      // User name to log into
             int Action)                // Action to be done.
{
    //
    // If the file is already open, someone is calling that function before closing the previous one. Error.
    //
    if (m_oCurLogFile.is_open ())
    {
        std::string msg;

        msg = "LogInit called for " + FileName + " witout closing previous session. Error";
        this->clsLog::Log (msg);
    }

        // Do some stuff

    return 0;
}

// 
// Log
// Logs the Message according to its Level.
//
// return = 0: Success
//          1: Failure
//
int Log (std::string Message, int Level) // Register a log according to the log state.
{
    time_t now;
    struct tm ptm;
    char buffer [32];

    //
    // If the sent message level is below the current level, abort.
    //
    if (Level < m_iCurLogLevel)
        return 1;


    // Get the current date and time and convert it to the time structure (ptm)
    now = time (NULL);
    localtime_s (&ptm, &now);

    //
    // Format the time structure: DD/MM/AAAA HH:MM:SS)
    strftime (buffer, 32, "%D/%M/%Y %H:%M:%S", &ptm);


    // Check if needs to be logged on stdio
    //
    if ((m_iCurLogLevel & LOGACTION_STDOUT) == LOGACTION_STDOUT)
    {
        cout << buffer + " " + Message; 
    }

    return 0;
}

我无法编译。我收到以下错误

this->clsLog::Log (msg);

“->Log”左侧的 C2227 错误必须指向类/结构/联合/泛型类型。使用VS2010,Win32应用。

帮助表示赞赏。

路数

4

2 回答 2

1

this指针仅在作为类或结构的(非静态)成员的方法内有效。没有this简单的功能,例如LogInit.

于 2013-04-08T22:48:02.910 回答
1

我没有看到任何证据表明您的函数在类定义中;因此,正如错误消息所说,没有可用的“this”指针。“This”仅在类的实例成员中可用。

于 2013-04-08T22:50:24.420 回答