• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jednak nie umiem stosowac podejscia obiektowego.

Object Storage Arubacloud
0 głosów
242 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)

Czesc, dalej bawie sie z pqxx (bilioteka postgresql pod c++) i napotkalem pewien problem otoz jak dzialaja zmienne lokalne w metodach klasy i czy da sie taka zmienna wyciagnac. Wytlumacze problem. 

Mam jedna metode klasy w ktorej robie cos takiego.       connection C("dbname="+dbname+" user="+user+" password="+password+" hostaddr="+hostaddr+" port="+port);

A w drugiej metodzie potrzebuje sie odwolac do obiektu C w taki sposob     work W(C);

ale dostaje C was not declared in this scope. 

Teraz wrzucam prototyp tej klasy 

#ifndef TABELASQL_HPP_INCLUDED
#define TABELASQL_HPP_INCLUDED

#include <pqxx/pqxx>
#include <array>
#include <vector>
#include <iostream>
#include <string>

using namespace std;
using namespace pqxx;

class TabelaPostgre;

class TabelaPostgre
{
public:
    connection C;
    string name;
    public:
        template<typename T,typename... Rest> void create(T& x, Rest... rest);
        void connect_2_db();
        template<typename T,typename... Rest> void INSERT(T& x, Rest... rest);
        template<typename T,typename... Rest> void SELECT(T& x, Rest... rest);
        void DELETE();

};

#endif // TABELASQL_HPP_INCLUDED

Nadal nie dziala a to pewnie dlatego ze zle sie odnosze do szablonu funkcji w pliku cpp ale teoretyzuje bo kompilator mi tam wywala blad.

Prosilbym o wyjasnienie i wytlumaczenie bledu. 

PS: Nie chcialbym zasmiecac main'a i innych metod klasy kolejnymi obiektami kiedy mam je juz w jednej funkcji ale lokalnie. Globalnie nie dziala :(

Pozdrawiam wiem ze podalem nie za duzo informacji wiec jakby cos to pisac.

2 odpowiedzi

+1 głos
odpowiedź 20 lutego 2016 przez criss Mędrzec (172,590 p.)
wybrane 22 lutego 2016 przez 0xf
 
Najlepsza

Po pierwsze: nie używaj using namespace w plikach *.h/*.hpp, bo wtedy przy kompilacji używanie namespace-u staje się aktywne dla całego projektu, a to może powodować dziwne, trudne do znalezienia błędy. Jeśli już musisz, to w klamrach (np. wewnątrz klasy), ale najlepszym wyjściem jest po prostu pisanie pełnej nazwy typu razem z namespace-m.

Po drugie: tak jak pisze Patrycjesz. Definicje szablonów powinny być w pliku *.h. Co prawda nie jest to konieczność, bo da się to obejść, ale to jest najprostsze wyjście. Poczytaj: https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
To nie jest konkretnie o metodach, ale zasada ta sama.

Wtedy już wszystko powinno działać.

+1 głos
odpowiedź 20 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)
A gdzie masz definicje szablonów? Przecież ci już pisałem, że muszą być w definicji klasy...

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
0 głosów
2 odpowiedzi 167 wizyt
pytanie zadane 9 października 2019 w C i C++ przez torelq Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 427 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...