Странное сообщение об ошибке: функция-кандидат C3767 недоступна - PullRequest
1 голос
/ 26 мая 2011

Может кто-нибудь объяснить, почему я получаю следующие ошибки при компиляции кода, показанного ниже (и как это исправить)

ошибка C3767: 'ManagedClass::SetString': функции-кандидаты недоступны e: \ Temp \ ManagedCpp \ ManagedCpp \ ManagedCpp.cpp 24 ManagedCpp

ошибка C3767: 'ManagedClass::GetString': функции-кандидаты недоступны e: \ Temp \ ManagedCpp \ ManagedCpp \ ManagedCpp.cpp 26 ManagedCpp

Я прочитал следующий похожий вопрос, C ++ CLI error C3767: функции-кандидаты недоступны в котором говорится

Я рекомендую использовать вместо этого управляемый тип System::String^ во всех ваших общедоступных API. Это также гарантирует, что ваша библиотека легко вызывается из других языков CLR, таких как c #

Именно это я и сделал (кстати, это тестовый код, используемый для извлечения той же ошибки компиляции в гораздо большей DLL смешанного режима).

(Проект является проектом VS2008 C ++ / CLI, т. Е. В меню выберите Файл-> Новый проект-> Visual C ++ -> Консольное приложение CLR.)

Спасибо за вашу помощь.

using namespace System;

static public ref class ManagedClass
{
    static public int SetString(String^ s)
    {
        str = s;
    }

    static public String^ GetString()
    {
        return str;
    }

    static String^ str ;
};

int main(array<System::String ^> ^args)
{
    String^ test ="Here";
    ManagedClass::SetString(test);
    String^ j=  ManagedClass::GetString();
    return 0;
}

1 Ответ

3 голосов
/ 26 мая 2011

Вы используете синтаксис C # -ish;правильный синтаксис C ++ / CLI:

public ref class ManagedClass abstract sealed
{
public:
    static void SetString(String^ s) { str = s; }
    static String^ GetString() { return str; }

private: // I assume you want this even though your code omitted it
    static String^ str;
};

Обратите внимание, что для кода .NET было бы более идиоматично использовать свойство, а не получить / установить элемент-функцию.

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