Почему я не могу скомпилировать эту не-CLR программу в VC ++ 2008?Как это сделать? - PullRequest
3 голосов
/ 07 августа 2010

Почему я не могу скомпилировать / запустить эту не-CLR программу в VC ++ 2008?

Как это сделать?

MyProgram.cpp

#include <iostream>

namespace System
{
    public class Console
    {
    public:
        static void WriteLine(char str[])
        {
            std::cout<<str;
        }
    };
}

int main()
{    
    System::Console::WriteLine("This a non-CLR program!");
}

Error

Error   1   error C3381: 
'System::Console' : assembly access specifiers are only 
available in code compiled with a /clr option   
e:\...\MyProgram.cpp    6

Ответы [ 3 ]

11 голосов
/ 07 августа 2010

Это не не-CLR C ++ программа.В надлежащем C ++ классы не могут быть публичными (или частными).Вы хотите:

namespace System
{
    class Console
    {
    public:
        static void WriteLine(char str[])
        {
            std::cout<<str;
        }
    };
}

Также в C ++ символьные литералы являются константными, поэтому ваша функция должна быть:

static void WriteLine( const char * str)

, если вы хотите вызвать ее с одним из параметров.

4 голосов
/ 07 августа 2010

Удалить публичное ключевое слово. Ссылка

При применении к управляемому типу, такому как класс или структура, публичные и приватные ключевые слова указывают, будет ли класс представлен через метаданные сборки. public и private нельзя применять к неуправляемым классам.

1 голос
/ 07 августа 2010
namespace System
{
    public class Console // this line is causing the error
    .....

}

Классы в стандарте C ++ не могут быть публичными (или частными, или защищенными) внутри / вне пространства имен.

Изменить public class Console на class Console

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...