Avatar billede mieritz Nybegynder
07. november 2003 - 17:50 Der er 10 kommentarer og
1 løsning

Konverteringsproblemer fra Borland c++ builder 3 til c++ builder

Jeg har skrevet et program på en anden computer hvor der er installeret c++builder3 og ville så have det med hjem til mig selv hvor jeg har c++builder6, men når jeg prøver at compile det på min computer hjemme med c++builder6 så kommer der fejl, men det gør der ikke hvis jeg compiler den på den anden computer med c++builder3. Er der nogen der har en forklaring på dette problem skal jeg instille noget et eller andet sted. Håber nogen kan hjælpe mig det er rimelig irriterende da jeg så ikke kan komme videre med programet.
Avatar billede bertelbrander Novice
08. november 2003 - 23:19 #1
Det er lidt svært at sige noget fornuftigt om, når vi ikke ved hvilke fejl der er tale om.

Jeg tror ikke der er en hurtig metode til at få koden til at køre på begge versioner, du er sansynligvis nødt til at rette i din kode.

Det burde være lettere at få kode skrevet til Builder3 til at køre på Builder6 end omvendt.

Prøv at fortæl hvilke fejl du ser.
Avatar billede mieritz Nybegynder
10. november 2003 - 09:21 #2
i denne fil som hedder buildertools.h og den bruges i mange andre filer, men den giver ingen fejl på den anden compiler

// Some common subroutines.
//
// Note: First I made them inline but BC++ seems to have problems with
// this, at least when it is told to inline expand inline functions..

// This is used to print an element in a ListBox where the colums are controled
// by a HeaderControl:
//  list:  The listox
//  header: The header control controling the listbox
//  r    : The rectangle for this row
//  idx  : Element index in the header to draw (starting with 0)
//  str  : The string to print
static void drawItem(TListBox* list, THeaderControl* header, TRect& r, int idx, char* str) {
  r.Left=header->Sections->Items[idx]->Left;
  r.Right=header->Sections->Items[idx]->Right-4;

  int offset=0;
  if(header->Sections->Items[idx]->Alignment==taRightJustify) {
    int lenx=list->Canvas->TextWidth(str);
    offset=header->Sections->Items[idx]->Width-lenx-6;
  }
  list->Canvas->TextRect(r,r.Left+1+offset,r.Top,str);
}

// This will make the given index in a THeaderControl use any space
// that might be unused:
static void headerUseAll(THeaderControl* header, TListBox* list, int col) {
  // Find the unused space
  int unused_width=
    list->Width - header->Sections->Items[header->Sections->Count-1]->Right;

  // Compensate in an ugly way for a Scrollbar that might be dislayed
  unused_width-=20;

  if(unused_width!=0) {
    // It seems to be neccesarry to assign to w first..:
    int w=header->Sections->Items[col]->Width;
    header->Sections->Items[col]->Width=w+unused_width;
  }
}


Jeg får følgende fejl i denne fil

Type name expected allerede i første linje kan ikke se hvad der skulle være galt
Avatar billede segmose Nybegynder
10. november 2003 - 09:39 #3
Prøv at sætte en ; ind aller forrest i includen, forhindre uafsluttede class definitioner fra at forstyrre din kode.

Har du slået til/fra indlejrede kommentare til på din compiler i modsætning til i borland3'eren?
Avatar billede mieritz Nybegynder
10. november 2003 - 09:44 #4
jeg har ikke nogen include i denne fil og jeg ved ikke hvor jeg skal slå det til hvis det er noget der skal slås til eller skal det slås fra
Avatar billede segmose Nybegynder
10. november 2003 - 11:38 #5
Et eller andet sted står der
#include "buildertools.h"

og for at det skal virke skal der ståd en anden include der definere TListBox (medmindre du selv har defineret denne i den fil buildertools.h includeres i).

fx.
#include "tlistbox.h"
#include "nogetmedenfejli.h"
#include "buildertools.h"

int main ...

dette vil fejlagtigt give fejl i buildertools.h fx. hvis der i nogetmedenfejli.h står:
class JegErIkkeAfsluttetMedSemiColon {
  int noget;
}

så står der i din buildertools.h

static void drawItem ...

så vil compileren opfatte det som

class JegErIkkeAfsluttetMedSemiColon {
  int noget;
} static void drawItem ...

hvilket nok vil give compiler fejl.

Forklaring fra help til BCB6: Type name expected
One of these errors has occurred:
    In declaring a file-level variable or a struct field, neither a type name nor a storage class was given.
    In declaring a typedef, no type for the name was supplied.
    In declaring a destructor for a C++ class, the destructor name was not a type name (it must  be the same name as its class).
    In supplying a C++ base class name, the name was not the name of a class.

for de 2 første tilfælde vil et ; eller en } måske bringe dig videre.
Avatar billede mieritz Nybegynder
10. november 2003 - 12:23 #6
hvis det ikke giver compiler fejl på cbuilder3 hvorfor skulle det så give fejl på cbuilder6 det er det jeg ikke forstår. Her er mit kald af funktionen.

void TEditFolio::DrawItem(TListBox* lbox,THeaderControl* thc, msg_rec* mr,int Index,TRect& Rect,TOwnerDrawState State) {
  // Erase the existing line:
  lbox->Canvas->FillRect(Rect);

  drawItem(lbox,thc,Rect,0,lbox->Items->Strings[Index].c_str());
  drawItem(lbox,thc,Rect,1,mr->ms_status);

umiddelbart skulle der ikke være nogen problmer i det. Hvad kan det ellers skyldes hvad betyder fejlen oversat til dansk
Avatar billede segmose Nybegynder
10. november 2003 - 12:57 #7
Du må have
#include "buildertools.h"
stående et sted? prøv at vis de linier der er lige over (helt til tops i den fil fra denne include hvis det ikke er mega langt).

En grund til at det kunne være forskel er fx. at den ene compiler er sat til at accepter indlejrede kommentarer og den anden ikke er så vil følgende give fejl på den ene:

/*
  kommentar 1
/*
  kommentar 2
*/
Avatar billede mieritz Nybegynder
10. november 2003 - 12:59 #8
hvordan slår jeg det til/fra

#include <vcl.h>
#include <vector>
#include <string>
#include <fstream.h>
#pragma hdrstop

#include "tools.h"
#include "buildertools.h"
#include "spproto.h"
#include "spthread.h"
#include "protocol.h"
#include "connect.h"
//#include "BillLog.h"
#include "foliosel.h"
#include "edtfolio.h"
#include "entergrp.h"
#include "options.h"
#include "entermsg.h"
#include "enterwak.h"
#include "logprint.h"
#include "print.h"
//#include "Graphicview.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Avatar billede segmose Nybegynder
10. november 2003 - 13:09 #9
Så ville jeg gætte på at fejlen i virkeligheden ligger i tools.h, hvordan ser den ud, hvis den er meget lang så post kun de sidste classer.
Avatar billede mieritz Nybegynder
10. november 2003 - 13:13 #10
//---------------------------------------------------------------------------
#ifndef mytoolsH
#define mytoolsH
//---------------------------------------------------------------------------

#ifndef __WIN32__
  #include <assert.h>
#else
  // The standard assert routine makes the machine hang - so we use
  // this soft one
  #define assert(b)                                        \
    if(!(b)) {                                            \
      char buf[80];                                        \
      sprintf(buf,"In file %s line %i",__FILE__,__LINE__); \
      ::MessageBox(0,buf,"Assertion faild",MB_OK);        \
    }
#endif

template<class T> min(T a,T b) {
  return a<b ?  a : b;
};

template<class T> max(T a, T b) {
  return a>b ? a : b;
}

// Copies a file preserving time and date. Returns 0 on succes:
extern int copyFile(const char* source, const char* dest);

// Renames and deletes a file. Returns 0 on succes:
extern int renameFile(const char* source, const char* dest);
extern int deleteFile(const char* file);

// Retruns the directory of a file / directory:
extern string FindDirOf(const char* filename);

// Retruns the name of a directory / file without path:
extern string FindNameOf(const char* filename);

// Joins a filename/directory to a directory.
extern string DirAppendName(const char* sourname, const char* toappend);

inline string intString(int i) {
  char buf[20];
  itoa(i,buf,10);
  return string(buf);
}

// Interface functions:
#ifdef DSTRING_H
  inline String DirAppendName(String s, String d) {
    return String(DirAppendName(s.c_str(),d.c_str()).c_str());
  }

  inline String FindDirOf(String s) {
    return String(FindDirOf(s.c_str()).c_str());
  }

  inline String FindNameOf(String s) {
    return String(FindNameOf(s.c_str()).c_str());
  }
#endif

#endif
Avatar billede mieritz Nybegynder
10. november 2003 - 15:55 #11
har lige fået fat i c++builder3 og der er ingen problemer, men hvad der er foskellen på de to kunne jeg godt tænke mig at vide
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester