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

Link error на inline функцию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Какая должна быть структура сложного (объемного) проекта? http://www.cyberforum.ru/cpp-beginners/thread162804.html
Работа программы начинается с выполнения функции main(). В самой программе куча функций и классов. Как организовать структуру достаточно сложного проекта (программы), чтобы не "утонуть" в ней? Насколько я понимаю, удобнее всего каждый осмысленный блок выделять в отдельный файл + хедеры также отдельным блоком, чтобы не мешались :) То есть получается нечто такое: main.cpp - укрупненная логика...
C++ #include <list> - конфликт using namespace std с другими инклюдами Всем привет. Появилась надобность использовать списки, однако #include <list> подключается только вместе с using namespace std. Мои инклюды #pragma once #include "network.h" #include <d3dx9.h> #include "L_text.h" #include "L_smesh.h" #include "L_camera.h" #include "L_terrain.h" http://www.cyberforum.ru/cpp-beginners/thread162802.html
C++ WMI и Dev-C++
Мне нужно узнать объем видеопамяти на эту тему на гуглил что нужно использовать Win32_VideoConfiguration Class, но компилятор ругается на кучу ошибок даже на этом примере http://msdn.microsoft.com/en-us/library/aa390423(v=VS.85).aspx
C++ Стражи включения
Что значат эти строчки, #ifndef _CIRCL_H #define _CIRCL_H #endif /* _CIRCL_H */ понял так: если не дефинирована _CIRCL_H
C++ Римская система счисления. http://www.cyberforum.ru/cpp-beginners/thread162758.html
Всем здравствуйте! Очень нужна помощь в написании программы по переводу из римской системы счисления в арабскую на языке СИ. Я в этом почти ничего не понимаю. Заранее спасибо!
C++ Найти в строке string наиболее часто встречающуюся пару символов и заменить на один новый символ нужно найти в строке пару символов, которые повторяются чаще всех и заменить их на один новый символ например acfghhachfjiac "ac" заменить на "X" и чтобы в итоге вышло XfghhXhfjiX как считать строку из файла в стринг, если она содержит пробелы (нужно считать из файла строку с пробелами) подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.09.2010, 13:11     Link error на inline функцию

Не по теме:

Открывать пространство имен в заголовочном файле - плохо.



Надо использовать для заголовочных файлов связку #ifndef-#define-#endif или, в крайнем случае, #pragma once

Теперь по теме: встроенные функции должны быть определены внутри заголовочного файла. Также рекомендуется ставить спецификатор inline у определения, а не у объявления метода.
Переделанная версия:
Cats.hpp:
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
#ifndef CATS_HPP
#define CATS_HPP
 
#include <iostream>
 
class OldCat
{
 
public:
 
    OldCat(int age);
    OldCat(const OldCat&);
    ~OldCat();
    int GetAge() const;
    void SetAge(int age);
    void Meow() const;
 
private:
 
    int itsAge;
};
 
inline int OldCat::GetAge() const
{
    std::cout << "Calling function GetAge..." << std::endl;
    return itsAge;
}
 
#endif // CATS_HPP
Cats.cpp:
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
#include "cats.hpp"
 
OldCat::OldCat(int age)
{
    std::cout << "Calling constructor..." << std::endl;
    itsAge = age;
}
 
OldCat::~OldCat()
{
    std::cout << "Calling destructor..." << std::endl;
}
 
OldCat::OldCat(const OldCat& rhs)
{
    std::cout << "Calling copy constructor..." << std::endl;
    itsAge = rhs.itsAge;
}
 
void OldCat::SetAge(int age)
{
    std::cout << "Calling function SetAge..." << std::endl;
    itsAge = age;
}
 
 
void OldCat::Meow() const
{
    std::cout << "Meeoooow!" << std::endl;
}
main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdlib>
 
#include "cats.hpp"
 
int main()
{
    OldCat* pPushok = new OldCat(7);
    pPushok->Meow();
    std::cout << pPushok->GetAge() << std::endl;
    OldCat* pMursik = new OldCat(*pPushok);
    pMursik->SetAge(15);
    std::cout << pMursik->GetAge() << std::endl;
    delete pPushok;
    delete pMursik;
    pPushok = NULL;
    pMursik = NULL;
    return EXIT_SUCCESS;
}

Не по теме:

Поле itsLapok было неиспользовано, поэтому я его удалил

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