Форум программистов, компьютерный форум CyberForum.ru

Сигнатуры класса и библиотеки - C++

Восстановить пароль Регистрация
 
FanAs
54 / 42 / 1
Регистрация: 08.04.2011
Сообщений: 227
12.09.2012, 21:20     Сигнатуры класса и библиотеки #1
Доброго времени суток. Недавно взялся за изучение C++ и после C# и Java с классами работать немного непривычно... Вопрос такой, есть класс library.cpp, есть заголовочный файл library.h, насколько я понял заголовочный файл является чем-то вроде интерфейса и в нем должны быть указаны принимаемые параметры. Есть так же метод в библиотеке, разделяющий строку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <math.h>
#include "library.h"
 
using namespace std;
 
vector<string> split(const string &str, const string &del, const bool empty = true) {
    vector<string> result;
    if (del.empty()) 
    {
        result.push_back(str);
        return result;
    }
    string::const_iterator sBegin = str.begin();
    string::const_iterator sEnd;
 
    while (true)
    {
        sEnd = search(sBegin, str.end(), del.begin(), del.end());
        string temp(sBegin, sEnd);
        if (empty || !temp.empty())
            result.push_back(temp);
 
        if (sEnd == str.end())
            break;
        sBegin = sEnd + del.size();
    }
    return result;
}
В .h файле пытаюсь написать
C++
1
2
3
4
5
6
7
8
#pragma once
 
ref class library
{
public:
    library(void);
    std::vector<std::string> split(const std::string &str, const std::string &del, const bool empty);
};
Но выдает кучу ошибок:

Ошибка 4 error LNK2020: неразрешенная лексема (06000002) library::split C:\Users\FanAs\Documents\Visual Studio 2010\Projects\TestProject1\TestProject1\library.obj TestProject1
Ошибка 3 error LNK2020: неразрешенная лексема (06000001) library::.ctor C:\Users\FanAs\Documents\Visual Studio 2010\Projects\TestProject1\TestProject1\library.obj TestProject1
Ошибка 1 error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl split(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?split@@YA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0_N@Z) уже определен в library.obj C:\Users\FanAs\Documents\Visual Studio 2010\Projects\TestProject1\TestProject1\TestProject1.obj TestProject1
Ошибка 2 error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl split(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?split@@$$FYA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0_N@Z) уже определен в library.obj C:\Users\FanAs\Documents\Visual Studio 2010\Projects\TestProject1\TestProject1\TestProject1.obj TestProject1
Ошибка 5 error LNK1120: 2 неразрешенных внешних элементов C:\Users\FanAs\Documents\Visual Studio 2010\Projects\TestProject1\Debug\TestProject1.exe TestProject1

Что я сделал неправильно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.09.2012, 21:26     Сигнатуры класса и библиотеки #2
Цитата Сообщение от FanAs Посмотреть сообщение
Что я сделал неправильно?
неправильно то что начали писать код, сначала нужно разобраться, а потом писать код
короче: Литература C++
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
12.09.2012, 21:32     Сигнатуры класса и библиотеки #3
Во-первых, ref перед словом class. Я не уверен в смысле его для классов, но смутно догадываюсь, что это для передачи по ссылке. В общем, если это надо, то это делается точно не тут.

Во-вторых, в cpp-файле с реализацией надо указывать, метод какого класса определяется (жирным):
vector<string> library::split(const string &str, const string &del, const bool empty = true) {
Иначе линкер посчитал, что это просто глобальная функция. А метод library остался неопределённым, потому и пфф.

(В-третьих, его можно запихать в namespace и не городить классы.)
Jupiter
12.09.2012, 21:36     Сигнатуры класса и библиотеки
  #4

Не по теме:

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Во-первых, ref перед словом class. Я не уверен в смысле его для классов, но смутно догадываюсь, что это для передачи по ссылке. В общем, если это надо, то это делается точно не тут.
это C++/CLI

Yandex
Объявления
12.09.2012, 21:36     Сигнатуры класса и библиотеки
Ответ Создать тему
Опции темы

Текущее время: 16:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru