Ваша первая ошибка вообще использует float
: типы с плавающей запятой (half
, float
, double
и т. Д.) Предназначены для (аппроксимации) действительных чисел. Подходящим выбором здесь является char
, базовый «символьный» тип, но любой целочисленный тип должен работать, поскольку char
является также (обычно) наименьшим целочисленным типом.
Ваша вторая ошибка пытается использовать имена переменных (правильно: идентификаторы) в качестве символьных литералов :
float P; // uninitialized floating point object
'P' // literal character "P"
Ваш третий error, логическая ошибка, делает все сравнения в одном и том же порядке с одинаковыми переменными :
// edited to correct previous error
if ((p1 == 'P') && (p2 == 'R')) // checks if p1 wins
cout<<"Paper covers rock.";
if ((p1 == 'p') && (p2 == 'r')) // checks if p1 wins
cout<<"Paper covers rock.";
if ((p1 == 'P') && (p2 == 'r')) // checks if p1 wins
cout<<"Paper covers rock.";
if ((p1 == 'p') && (p2 == 'R')) // checks if p1 wins - shouldn't we check for p2 winning somewhere?
cout<<"Paper covers rock.";
Ваша четвертая ошибка, также логическая ошибка, основанная на назначении ограничения, не печатает, какой игрок выигрывает. Как упоминалось ранее, ваш код в настоящее время может определять только выигрыш игрока 1 или ничью.
Ваша пятая дискуссионная «ошибка» не печатает перенос строки (добавьте \n
к строке или << std::endl
к std::cout
) перед выходом.
То, что делает вещи интересными, - то, что MSI требует значение реестра, которое будет создано как способ обнаружить, был ли компонент установлен. Если мы предпочитаем создавать только одну такую стоимость реестра для всех ярлыков, то мы должны будем поместить все наши ярлыки в единственный компонент.
К счастью, возможно создать компоненты, которые охватывают несколько целевых каталогов путем использования атрибута Каталога на элементе Ярлыка.
<!-- shortcuts to applications in the start menu -->
<DirectoryRef Id="ProgramMenuProductFolder">
<Component Id="ProgramMenuShortcutsComponent" Guid="PUT-GUID-HERE">
<!-- create folders -->
<CreateFolder Directory="ProgramMenuVendorFolder" />
<CreateFolder Directory="ProgramMenuProductFolder" />
<CreateFolder Directory="ProgramMenuSubFolder" />
<!-- remove folder -->
<RemoveFolder Id="RemoveProgramMenuVendorFolder"
Directory="ProgramMenuVendorFolder"
On="uninstall" />
<RemoveFolder Id="RemoveProgramMenuProductFolder"
Directory="ProgramMenuProductFolder"
On="uninstall" />
<RemoveFolder Id="RemoveProgramMenuProductSubFolder"
Directory="ProgramMenuProductSubFolder"
On="uninstall" />
<!-- main shortcut -->
<Shortcut
Id="MainShortcut"
Name="My Product"
Target="[SomeInstalledFolder]app1.exe" />
<!-- shortcut in subfolder -->
<Shortcut
Id="SubFolderShortcut"
Name="mySubFolderShortcut"
Target="[SomeInstalledFolder]app2.exe"
Directory="ProgramMenuProductSubFolder" />
<!--
RegistryValue whichs serves as KeyPath
-->
<RegistryValue
Root="HKCU"
Key="Software\MyVendor\MyProduct"
Name="InstalledStartMenuShortcuts"
Type="integer"
Value="1" />
</Component>
</DirectoryRef>
<!-- shortcut directories -->
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuVendorFolder" Name="MyVendor">
<Directory Id="ProgramMenuProductFolder" Name="MyProduct">
<Directory Id="ProgramMenuProductSubFolder" Name="MySubFolder" />
</Directory>
</Directory>
</Directory>