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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FanAs
54 / 42 / 2
Регистрация: 08.04.2011
Сообщений: 227
#1

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

12.09.2012, 21:20. Просмотров 789. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Недавно взялся за изучение 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

Что я сделал неправильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сигнатуры класса и библиотеки (C++):

Создание класса с использованием библиотеки String - C++
Подскажите как создать класс что бы в объекте использовался тип стринг

Описание функции шаблонного класса библиотеки в отдельном cpp-файле - C++
Есть библиотека. В файле ARRAYLIST.HPP описан шаблон template &lt;typename _Type&gt; class ArrayList { private: int length; ...

На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, - C++
На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, в котором каждый объект может храниться только в одной...

сигнатуры - C++
помогите соорудить или предложите свои варианты: 1. сканирование сигнатур байт в другой программе, адрес определить никак нельзя, так как...

Реализовать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL - C++
Создать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL. Написать тестирующую программу,...

Антивирусные сигнатуры - C++
Всем привет) Порыл я MSDN на функции получения различной информации о файле. Задача моя довольна простая, программа должна искать по...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.09.2012, 21:26 #2
Цитата Сообщение от FanAs Посмотреть сообщение
Что я сделал неправильно?
неправильно то что начали писать код, сначала нужно разобраться, а потом писать код
короче: Литература C++
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2012, 21:36
Привет! Вот еще темы с ответами:

Не работает поиск сигнатуры - C++
Доброго времени суток. Задач - найти адрес в памяти по известной сигнатуре. В Си новичек. Перелопатил нет, из нарытого накодил: #include...

Уточнения сигнатуры функции для std::function - C++
Добрый день, как в таких случаях уточнить какую именно перегрузку функции random я передаю в std::function ? #include &lt;iostream&gt; ...

Изменятся ли сигнатуры функций в программе при обфускации? - C++
Такой вопрос есть необходимо изменить сигнатуры функций в программе ( для обхода античита) изменит ли Обфускация сигнатуры?

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin') - C++
какие библиотеки нужны для функций 'cout' и 'cin' ???


Искать еще темы с ответами

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru