为什么我不能在VC ++ 2008中编译这个非CLR程序?怎么做?

时间:2010-08-07 10:24:06

标签: c++ visual-c++

为什么我不能在VC ++ 2008中编译/运行这个非CLR程序?

怎么做?

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   1   error C3381: 
'System::Console' : assembly access specifiers are only 
available in code compiled with a /clr option   
e:\...\MyProgram.cpp    6

3 个答案:

答案 0 :(得分:11)

这不是非CLR C ++程序。在适当的C ++中,类不能是公共的(或私有的)。你想要:

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

同样在C ++中,字符文字是const,所以你的函数应该是:

static void WriteLine( const char * str)

如果你想用一个作为参数调用它。

答案 1 :(得分:4)

删除public关键字。 Link

  

当应用于托管类型(例如类或结构)时,public和private关键字指示是否将通过程序集元数据公开该类。 public和private不能应用于非托管类。

答案 2 :(得分:1)

namespace System
{
    public class Console // this line is causing the error
    .....

}

标准C ++中的类不能在命名空间内/外公开(或私有或受保护)。

public class Console更改为class Console