C++ 无法访问公共静态方法

C++ 无法访问公共静态方法,c++,visual-c++,C++,Visual C++,我有这门课 #pragma once namespace CMT{ namespace sql=System::Data::SqlClient; public ref class db { public:db(void){} public: static sql::SqlConnection SC(){ System::String cstring="data source=192.168.0.139\\cedfit; "+ "initia

我有这门课

#pragma once
namespace CMT{
namespace sql=System::Data::SqlClient;
public ref class db
{
public:db(void){}
public: static sql::SqlConnection SC(){
            System::String cstring="data source=192.168.0.139\\cedfit; "+
                "initial catalog=cedfitdb; user id=client; password=cedfit";
            sql::SqlConnection sc=new sql::SqlConnection(cstring);
            return sc;
        }

};
}
现在,当我转到form 1 load事件时,我无法访问db的SC()方法,为什么

我还尝试在form1 load事件中生成以下代码:

System::Data::SqlConnection mycon=db::SC();
mycon.Open();//I also tried mycon->Open() and mycon::Open()
为什么它不起作用?为什么程序不能识别“Open()”? 另外,当我将
#include“db.h”
放在CMT.cpp上时,它表示
无法从System::Data::Sqlclient::SqlConnection转换为int

我确信我正在返回一个SqlConnection,但为什么?

在尝试通过C++/CLI在.NET framework中使用引用类型时,会出现许多错误

--在C++/CLI中引用.NET引用类型时,需要使用^。此外,在为引用类型分配内存时,需要使用
gcnew
而不是
new
。请参见以下更改:

static sql::SqlConnection^ SC()
{
    System::String^ cstring = "data source=" + "asdfasdf";
    sql::SqlConnection^ sc = gcnew sql::SqlConnection(cstring);

    return sc;
}
--在代码中尝试使用该方法时,这也是一个问题。此外,您没有为
SqlConnection
以及
CMT::db::SC
指定正确的命名空间

int main(array<System::String ^> ^args)
{
    System::Data::SqlClient::SqlConnection^ mycon = CMT::db::SC();
    mycon->Open();

    return 0;
}
Main.cpp

//ConsoleApplication1.cpp:主项目文件。
#包括“stdafx.h”
#包括“db.h”
使用名称空间系统;
int main(数组^args)
{
System::Data::SqlClient::SqlConnection^mycon=CMT::db::SC();
mycon->Open();
返回0;
}

您能否正确缩进代码并更新问题?我可以上传整个解决方案吗?@user1625766不需要。但是你应该澄清你使用C++的方言。它看起来像C++/CLI,但也可以是C++/CX.1>C:\users\sherwin\desktop\cmt\cmt\Form1.h(73):错误C2039:“SC”:不是“cmt”1>C:\users\sherwin\desktop\cmt\Form1.h(73)的成员:错误C3861:“SC”:找不到标识符1>生成日志保存在“file://C:\users\sherwin\desktop\cmt\cmt\Debug\BuildLog.htm”1>cmt-3错误,0警告(s) ============生成:0成功,1失败,0最新,0跳过===========@user1625766您是否包含了相应的*.h文件?是的,我确实添加了#include“db.h”在CMT中。cpp@user1625766你是否把它放在了<代码> Frime1.H//>中,或者在哪里使用它?更不用说像@ InHeHER编辑的那样,它在<代码> dB。h < /Cord>中的正确命名空间中声明:非常感谢。(我最初是从C,这就是为什么我不能正确使用C++)还有一个问题,我是否可以将所有的#include“db.h”头文件放在一个文件中,而不是放在每个windows窗体中?因为我这里有7张表格
#pragma once

namespace CMT {
namespace sql = System::Data::SqlClient;

ref class db
{
public:

    db(void)
    {
    }

    static sql::SqlConnection^ SC()
    {
        System::String^ cstring = "whatever";
        sql::SqlConnection^ sc = gcnew sql::SqlConnection(cstring);

        return sc;
    }

};

}
// ConsoleApplication1.cpp : main project file.

#include "stdafx.h"
#include "db.h"

using namespace System;

int main(array<System::String ^> ^args)
{
    System::Data::SqlClient::SqlConnection^ mycon = CMT::db::SC();
    mycon->Open();

    return 0;
}