Используя 7zip для извлечения файла ISO чрезвычайно просто, даже он имеет несколько частей. Давайте предположим, что Вы сделали, чтобы ISO заархивировала с тремя частями, названными iso.001 , iso.002 , iso.003 .
стандартная командная строка таким образом:
7z x a.iso.001 -tiso.split -o output_dir
или
7z x a.iso.001 -tudf.split -o output_dir
Передача флаг-t с "разделил" , признак конкретно скажет 7z, что ISO имеет мультичасти, предшествование , "iso" or "udf" будет зависеть от Вашего формата контейнера ISO.
#include guards - стандартный способ сделать это. #pragma once - нет, что означает, что не все компиляторы его поддерживают.
Эта проблема возникает, если
перед
. Попробуйте организовать свой список включения так, чтобы
был включен после
или сначала определите _WINSOCKAPI_
:
#define _WINSOCKAPI_ // stops windows.h including winsock.h
#include <windows.h>
// ...
#include "MyClass.h" // Which includes <winsock2.h>
См. Также это .
#pragma once
основан на полном пути имени файла. Так что, скорее всего, у вас есть две идентичные копии MyClass.h или Winsock2.h в разных каталогах.
Вы должны использовать защиту заголовка.
поместите эту строку вверху файла заголовка
#ifndef PATH_FILENAME_H
#define PATH_FILENAME_H
и внизу
#endif
Я бы не стал использовать только FILENAME_H но
#ifndef FILENAME_H_AF06570D_B36E_4B82_8F97_C456AF4A38FD
#define FILENAME_H_AF06570D_B36E_4B82_8F97_C456AF4A38FD
//code stuff
#endif // FILENAME_H_AF06570D_B36E_4B82_8F97_C456AF4A38FD
я всегда использовал postfix guid. Несколько лет назад я столкнулся с очень плохой базой кода, в которой были разные файлы заголовков с одним и тем же именем и включали защиту. В рассматриваемых файлах был определен класс с таким же именем. Если бы использовались только пространства имен. Некоторые проекты собраны, некоторые нет. Использование уникальных средств защиты было частью решения по различению заголовков и их содержимого.
В Windows с Visual Studio используйте guidgen.exe, в Linux - uuidgen -t.
#pragma once
работает нестабильно даже в компиляторах MS и не поддерживается многими другими компиляторами. Как уже упоминали многие другие люди, использование include guards - лучший способ. Ни в коем случае не используйте #pragma once
- это значительно облегчит вам жизнь.
Используя «защиту заголовков»:
#ifndef MYCLASS_H
#define MYCLASS_H
// This is unnecessary, see comments.
//#pragma once
// MyClass.h
#include <winsock2.h>
class MyClass
{
// methods
public:
MyClass(unsigned short port);
virtual ~MyClass(void);
};
#endif
Я столкнулся с этой проблемой, когда пытался вытащить сторонний пакет, который явно включал windows.h где-то в беспорядке заголовков. Определить _WINSOCKAPI_
на уровне проекта было намного проще (не говоря уже о более удобном обслуживании), чем пробираться через их суп и исправлять проблемные включения.
О - уродство Windows... Здесь важен порядок включения. Вам нужно включить winsock2.h перед windows.h. Поскольку windows.h, вероятно, включен из вашего предварительно скомпилированного заголовка (stdafx.h), вам нужно включить winsock2.h оттуда:
#include <winsock2.h>
#include <windows.h>