2016-01-12 2 views
-3

Я открыл консольное приложение win32 и добавил библиотеку классов. В настоящее время я пытаюсь использовать эту библиотеку классов, но когда я настраиваю библиотеку классов с именем пространства имен, я не могу использовать тип данных String. Он говорит, что для класса «System :: String» не существует конструктора по умолчанию. Я не могу понять, как избавиться от этой ошибки.Библиотека классов C++

Заголовочный файл

#pragma once 
using namespace System; 
using namespace System::Net::Sockets; 

namespace [Name]{ 

public ref class [Name] 
{ 
private: 
    System::String ipaddress; 
    System::String port; 

public: 
    [Constructor](System::String,System::String,System::String); 
}; 
} 

CPP Файл

// Это основной файл DLL.

#include "stdafx.h" 
#include "header file" 

namespace [Name] { 

[Name]::[Constructor](System::String ip,System::String portN,System::String protocol) 
{ 
    ipaddress = ip; 
    port = portN; 

} 
} 
+2

Является ли это проектом C++ или C++/CLI? Настоящий «проект консоли Win32» - это * не * C++/CLI, поэтому вы не можете использовать типы BCL, такие как 'System.String' в этих проектах. – Dai

+0

Кроме того, являются ли символы '' '' '' '' '' '' '' в вашем коде или вы просто запутываете свои имена? – Dai

+0

Я не знаю, есть ли у Visual C++ некоторые специальные функции, но обычно вы должны включать соответствующие файлы заголовков, чтобы сделать классы доступными. Я не вижу заголовок с включенным заголовком, прежде чем вы используете System :: String. Если классы определены в stdafx.h, я бы рекомендовал включить этот заголовок в ваш файл заголовка тоже. – JojOatXGME

ответ

1

Вы создали неправильный тип проекта.

Создать проект Проект Win32 (или Пустой проект).

Вы создали Class Library, который находится в категории CLR в диалоговом окне New Project . Это означает, что вы не получаете проект C++, а проект C++/CLI.

C++/CLI отличается лучшим. Для записи, ваш код должен будет выглядеть следующим образом:

namespace NamespaceName 
{ 

    public ref class ClassName 
    { 
    private: 
     System::String^ ipaddress; 
     System::String^ port; 

    public: 
     ClassName(System::String^ ip, System::String^ port, System::String^ protocol); 
    }; 

} 

Эти ^ символов означают типом является управляемой ручкой.
Думайте о них так, как если бы они были *, но указывали на управляемый объект.

Но, учитывая учебник, который вы пытались выполнить, это не что вы хотите. Поэтому создайте простой проект на C++ и используйте std::string вместо System::String, который является управляемым типом.

Смежные вопросы