gpt4 book ai didi

c++ - C++03 和 C++11 类的区别

转载 作者:行者123 更新时间:2023-11-27 22:59:57 25 4
gpt4 key购买 nike

我目前正在构建一个应用程序,其中我有一个日志函数,可以在我的大多数类中访问,声明如下:

FileHandler.h

#ifndef FILEHANDLER_H
#define FILEHANDLER_H

#pragma once

#include <SDL.h>
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <cctype>

//Include to allow logging
#include "log.h"

class fileHandler
{

public:
fileHandler();
virtual ~fileHandler();

void WriteToFile(const std::string& filename, std::string textToWrite);
std::vector<std::string> ReadFromFile(const std::string& filename);

std::string& TrimString(std::string& stringToTrim);


protected:
private:

class log logHandler;

std::vector<std::string> blockOfText;
std::string currentLine;
};

#endif // FILEHANDLER_H

Log.h

#ifndef LOG_H
#define LOG_H

#pragma once

#include <SDL.h>
#include <string.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <time.h>

class log
{
public:
log();
virtual ~log();

void static WriteToConsole(std::string textToWrite);
void WriteToLogFile(std::string textToWrite);

protected:
private:

};

#endif // LOG_H

这在很长一段时间内都运行良好,然后我想在我的应用程序的其他地方包含另一个只与 C++11 兼容的函数,所以我告诉编译器编译到这些标准。然后我收到关于“log logHandler”的错误,说 log 不是声明的名称。

我能够通过将行更改为来解决问题

class log logHandler;

我想知道是否有人可以告诉我 C++03 和 C++11 之间有什么变化需要我这样做?

编辑:包括所有相关代码以使问题更完整。

最佳答案

您没有显示您的真实代码(类声明末尾缺少 ;,没有 #endif),但您的问题可能与 std::log 有某种关联,它在 C++11 中收到了一个新的重载,与 using namespace std 相结合在你的代码中的某处。

请注意,新的过载可能与手头的问题无关;真正的原因很可能是编译器的标准库实现中某处的更改导致内部 #include <cmath> .这意味着即使在 C++03 中,您的代码也只是出于巧合,并且始终允许符合标准的 C++03 编译器拒绝它。

这是一个可能会重现您的问题的示例程序:

#include <cmath>

using namespace std;

struct log
{
};

int main()
{
// log l; // does not compile
struct log l; // compiles
}

关于c++ - C++03 和 C++11 类的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28784210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com