Gå til innhold

har du en kode som ikke virker? post den her!


Anbefalte innlegg

Videoannonse
Annonse
Skrevet (endret)
Jeg passet på å kompilere ...

Legg merke til at gcc test.c -o test /både/ er kompilering og linking .. derfor unresolved externals. Kommer ganske klart frem i første linken ovenfor.

 

bobafett: Du spiller Enemy Territory! heh

 

Edit2:

anderlin (under): N.P. :]

Endret av søppel
Gjest Slettet-8fx0y6VV
Skrevet (endret)

Jeg holder paa aa leke meg med boken Accelerated C++, og har naa stott paa et lite problem. Denne koden vill ikke kompilere:

(Jeg bruker nyeste version av GCC)

I vec.cpp har jeg laget meg min egen versjon av vector vector biblioteket

og i str.cpp har jeg laget min egen versjon av string biblioteket .

Jeg er ganske sikker paa at vec virker, men er usikker paa resten

 

main.cpp

#include <iostream>
#include "str.cpp"

using namespace std;

int main()
{
 Str foo;
 foo = "Hei! Virker dette?";
 cout << foo << endl;
}

 

str.cpp:

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <ios>
#include <algorithm>
#include <string>
#include <vector>
#include <stdexcept>
#include <cctype>
#include <iterator>
#include <memory>
#include "vec.cpp"

using namespace std;

class Str
{
 // venner
   friend istream& operator>>(istream&, Str&);
   
 public:
   typedef Vec<char>::size_type size_type;
   
   // constructors
   Str() {  }
   Str(size_type n, char c): data(n, c) {  }
   Str(const char* cp) { copy(cp, cp+strlen(cp), back_inserter(data)); }
   template <class In> Str(In b, In e) { copy(b, e, back_inserter(data)); }
   
   // operators
   char& operator[](size_type i) { return data[i]; }
   const char& operator[](size_type i) const { return data[i]; }
   Str& operator+=(const Str& s) {  
     copy(s.data.begin(), s.data.end(), back_inserter(data));
     return *this;
   }
   operator char*();
   operator const char*() const;
   
   // diverse
   size_type size() const { return data.size(); }
   
 private:
   Vec<char> data;
};

//definering av funksjoner
  // operators
   ostream& operator<<(ostream&, const Str&);
   Str operator+(const Str&, const Str&);

// resten av funksjonene
ostream& operator<<(ostream& os, const Str& s)
{
 for (Str::size_type i = 0; i != s.size(); ++i)
   os << s[i];
 return os;
}

istream& operator>>(istream& is, Str& s)
{
 //s.data.clear();
 
 char c;
 while (is.get(c) && isspace(c))
  ;
 
 if (is)
 {
   do s.data.push_back(c);
   while (is.get(c) && !isspace(c));
   
   if (is)
     is.unget();
 }
 
 return is;
}

Str operator+(const Str& s, const Str& t)
{
 Str r = s;
 r += t;
 return r;
}

 

vec.cpp

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <ios>
#include <algorithm>
#include <string>
#include <vector>
#include <stdexcept>
#include <cctype>
#include <iterator>
#include <memory>

using namespace std;

template <class T> class Vec {
 public:
   typedef T* iterator;
   typedef const T* const_iterator;
   typedef size_t size_type;
   typedef T value_type;
   typedef T& reference;
   typedef const T& const_reference;
   
   Vec() { create(); }
   explicit Vec(size_type n, const T& t = T()) { create(n, t); }
   Vec(const Vec& v) { create(v.begin(), v.end()); }
   Vec& operator=(const Vec&); // as defined in $11.3.2/196
   ~Vec() { uncreate(); }
   
   T& operator[](size_type i) { return data[i]; }
   const T& operator[](size_type i) const { return data[i]; }
   
   void push_back(const T& t)
   {
     if (avail == limit)
       grow();
     unchecked_append(t);
   }
   
   size_type size() const { return avail - data; }
   
   iterator begin() { return data; }
   const_iterator begin() const { return data; }
   
   iterator end() { return avail; }
   const_iterator end() const { return avail; }
   
 private:
   iterator data;
   iterator avail;
   iterator limit;
   
   allocator<T> alloc;
   
   void create();
   void create(size_type, const T&);
   void create(const_iterator, const_iterator);
   
   void uncreate();
   
   void grow();
   void unchecked_append(const T&);
};

template <class T> void Vec<T>::create()
{
 data = avail = limit = 0;
}

template <class T> void Vec<T>::create(size_type n, const T& val)
{
 data = alloc.allocate(n);
 limit = avail = data + n;
 uninitialized_fill(data, limit, val);
}

template <class T> void Vec<T>::create(const_iterator i, const_iterator j)
{
 data = alloc.allocate(i, j);
// endret til unini fra ini
 limit = avail = uninitialized_copy(i, j, data);
}

template <class T> Vec<T>& Vec<T>::operator=(const Vec& rhs)
{
 if (&rhs = this)
 {
   uncreate();
   create(rhs.begin(), rhs.end());
 }
 return *this;
}

template <class T> void Vec<T>::uncreate()
{
 if (data)
 {
   iterator it = avail;
   while (it != data)
     alloc.destroy(--it);
   alloc.deallocate(data, limit - data);
 }
 data = limit = avail = 0;
}

template <class T> void Vec<T>::grow()
{
 size_type new_size = max(2 * (limit - data), ptrdiff_t(1));
 iterator new_data = alloc.allocate(new_size);
 iterator new_avail = uninitialized_copy(data, avail, new_data);
 
 uncreate();
 
 data = new_data;
 avail = new_avail;
 limit = data + new_size;
}

template <class T> void Vec<T>::unchecked_append(const T& val)
{
 alloc.construct(avail++, val);
}

 

*** EDIT ***

Oppgradert koden litt

Endret av rapt0r
Skrevet

for meg virker det som om du har glemt aa definere operator= for Str, da er det jo ikke saa rart hvis det ikke funker aa gjoere Str = "bahaha"

ellers er det jo lurt aa si HVA som ikke virker.

tror heller ikke det smarteste du gjoer er aa ha stringrepresentasjonen som en vektor.

 

typedef T* iterator huhu

Gjest Slettet-8fx0y6VV
Skrevet

Jeg har gjort litt mere testing, og funnet ut at vec.cpp og main.cpp har ingen feil. Og saa fant jeg ut at alle feilene ligger i str.cpp.

Jeg fant ogsaa noen fil i koden selv, men den kompilerer fortsatt ikke. (koden er oppgradert i min forste post)

 

Hva som skjer naar jeg kompilerer:

[espen@localhost c12]$ c++ eks1.cpp -o eks1
vec.cpp: In member function `void Vec<T>::create(const T*, const T*) [with T = char]':
vec.cpp:26:   instantiated from `Vec<T>::Vec(const Vec<T>&) [with T = char]'
str.cpp:82:   instantiated from here
vec.cpp:79: error: invalid conversion from `const char*' to `unsigned int'
vec.cpp:79: error:   initializing argument 1 of `_Tp* __gnu_cxx::new_allocator<_Tp>::allocate(size_t, const void*) [with _Tp = char]'

Skrevet (endret)

Jupp .. feilen er på linje 79 ..

 

Edit:

i vec.cpp ja

 

Er du 100% sikker på at det er klin umulig å korte ned koden og få den inn i én paste?

Endret av søppel
  • 2 uker senere...
Skrevet (endret)
//denne koden virker men dere ser jo at jeg har brukt if og else problemet er at du ikke får mulkighet til å skrive svaret

Det er jo ikke veldig rart :nei:. Hvorfor gjør du ikke noe med det, hvis du har lyst til å skrive svaret? Hva er egentlig vitsen med de if og else greiene dine?

 

Jeg er helt sikker på at den ikke virker.

 

Uansett, hva er det du prøver å oppnå?

Si det du!

 

Edti: Burde slutte å disse html-liknende greiene for hånd jeg ass. *sukk*

Endret av zirener
Skrevet
//denne koden virker men dere ser jo at jeg har brukt if og else problemet er at du ikke får mulkighet til å skrive svaret

Det er jo ikke veldig rart :nei:. Hvorfor gjør du ikke noe med det, hvis du har lyst til å skrive svaret? Hva er egentlig vitsen med de if og else greiene dine?

 

Jeg er helt sikker på at den ikke virker.

 

Uansett, hva er det du prøver å oppnå?

Si det du!

det skal bli et matte regne program har fikset det nå

Skrevet
det skal bli et matte regne program har fikset det nå

Få se koden, da :) Matte regne programmer (...) er alltid gøyale.

//man kan vel kalle dette en slags kalkulator

det er vel en el forandring.

 

 

 

 

#include "stdafx.h"

 

 

int _tmain(int argc, _TCHAR* argv[])

{

std::cout<<"skriv et tall du vil gange trykk deretter enter så skriver du et nytt tall"<<std::endl;

int a;

int b;

int c;

int d;

std::cin >> a;

 

std::cin >> b;

c = a * b;

std::cerr;

system("Pause");

d = c;

std::cout << d;

system("Pause");

return 0;

}

Skrevet

#include <iostream>

using namespace std;


int main()
{
for(;;) {
 unsigned int w = rand() % 100;
 for(unsigned int i = 0; i < w; i++)
 	cout << " ";
 cout << "*";
}

return(0);
} // main

 

*screensaver* ..whohoooo

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...