07. november 2003 - 17:50Der 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.
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
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).
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.
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.
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:
#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);
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
Synes godt om
Ny brugerNybegynder
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.