Incluindo arquivos em projeto

Delphi

03/06/2009

Pessoal, meu problema é o seguinte: Tenho um projeto feito em builder que tem um código que precisa de dois arquivos .cpp externos (pois nestes códigos estão as funções de cálculo que preciso) e estes dois .cpp externos precisam de um .h.
Tentei incluir os dois .cpp usando ´add to project´ e depois ´use unit´, mas na hora de compilar o builder dá o seguinte erro: [BCC32 Error] Unit1.cpp(20): E2209 Unable to open include file ´subEnSai.h´
Como faço para incluir os dois .cpp e o .h no projeto para que o código funcione?


Sergioaav

Sergioaav

Curtidas 0

Respostas

Rodc

Rodc

03/06/2009

Nas opções do projeto você precisa incluir o caminho para os arquivos no ´Include Path´.


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Já inclui o diretório onde estão os arquivos e não deu certo também. O erro persiste.


GOSTEI 0
Rodc

Rodc

03/06/2009

Tenta incluir o .h no projeto também. Na tela de adicionar arquivo mude o tipo do arquivo para ´.h´, ao invés de ´.cpp´.


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Adicionei o .h através de ´Add to project´ mas ele não aparece na lista ´Use unit´ então adicionei a linha #include ´bibsubrotinas.h´ manualmente. Mas ainda dá erro.
Esse arquivo .h contém uma nova classe, TNavier. Como eu adiciono essa nova classe ao projeto?Ppois ele só reconhece TForm.


GOSTEI 0
Rodc

Rodc

03/06/2009

O .h não aparece na lista ´Use Unit´ ele só aparece na lista de arquivos do projeto. Qual versão do CBuilder você está usando?
Você adicionou ao projeto o arquivo ´subEnSai.h´ ou ´bibsubrotinas.h´? O CBuilder não encontrou o primeiro, mas você está fazendo include do segundo!


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Adicionei já os arquivos subEnSai.cpp e subrotinas.cpp já no projeto através de ´Add to project´ e ´Use unit´... eles aparecem no programa principal como #include ´subEnSai.h´ e include ´subrotinas.h´ e já adicionei tb o bibsubrotinas.h q aparece no programa principal como include ´bibsubrotinas.h´... esse bibsubrotinas.h é usado pelos dois cpps...
Meu builder é o 2009.


GOSTEI 0
Rodc

Rodc

03/06/2009

No includes, tente troca o ´´ por <>
#include <subEnSai.h>
include <subrotinas.h>

Se não funcionar esgotaram minhas sugestões... :(


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Também não deu certo. Obrigado pela ajuda. Espero que mais alguém tente me ajudar.


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Consegui resolver o problema. Converti os dois arquivos .cpp pra .h e adicionei todos ao programa principal. Agora está rodando. Só que agora apareceu um novo erro que não tenho idéia do que seja. O erro é: [BCC32 Warning] subrotinas.h(176): W8066 Unreachable code
Esta linha de erro leva ao seguinte código apontado da função abaixo:
void TNavier::PropGeom(void)
{
 double Xm,Ym,Zm,rel,a1;
 double dX,dY,dZ;
 register int i,j,k;

 rel = 1.05;
 switch(maX)  {// COORDENADA X
xf[0] = 0.0; <<<<<<<--------------------------------
xc[0] = 0.0;
case 0:
dX = X/M;
for(i=1; i<=M; i++)  {
xf[i] = xf[i-1] + dX;
xc[i] = (xf[i]+xf[i-1])/ 2.0;
}
break;
case 1:
Xm = X/2;
a1 =  Xm*(1.0- rel) /(1.0-pow(rel,M/2));
for(i=1;i<=(M/2);i++)  {
dX = a1*pow(rel,i-1);
xf[i] = xf[i-1] + dX;
xc[i] = (xf[i]+xf[i-1])/ 2.0;
}
for(i=(M/2)+1; i<=M; i++)  {
dX = a1*pow(rel,M-i);
xf[i] = xf[i-1] + dX;
xc[i] = (xf[i]+xf[i-1])/ 2.0;
}
break;
 }
 xf[M+1] = xf[M];
 xc[M+1] = xf[M];
 switch(maY)  {// COORDENADA Y
yf[0] = 0.0;
yc[0] = 0.0;
case 0: // malla uniforme
dY = Y/N;
for(j=1; j<=N; j++)  {
yf[j] = yf[j-1] + dY;
yc[j] = (yf[j]+yf[j-1])/ 2.0;
}
break;
case 1:
Ym = Y/2;
a1 =  Ym*(1.0- rel) /(1.0-pow(rel,N/2));
for(j=1;j<=(N/2);j++)  {
dY = a1*pow(rel,j-1);
yf[j] = yf[j-1] + dY;
yc[j] = (yf[j]+yf[j-1])/ 2.0;
}
for(j=(N/2)+1; j<=N; j++)  {
dY = a1*pow(rel,N-j);
yf[j] = yf[j-1] + dY;
yc[j] = (yf[j]+yf[j-1])/ 2.0;
}
break;
 }
 yf[N+1] = yf[N];
 yc[N+1] = yf[N];
 switch(maZ)  {// COORDENADA Z
case 0: // malla uniforme
dZ = Z/L;
switch(ccz)  {
case 0: // parede
Lim = L-1;
zf[0] = 0.0;
zc[0] = 0.0;
for(k=1; k<=L; k++)  {
zf[k] = zf[k-1] + dZ;
zc[k] = (zf[k]+zf[k-1])/ 2.0;
}
zf[L+1] = zf[L];
zc[L+1] = zf[L];
break;
case 1: // derivada nula
Lim = L;
zf[0] = 0.0;
zc[0] = -dZ/ 2.0;
for(k=1; k<=L+1; k++)  {
zf[k] = zf[k-1] + dZ;
zc[k] = (zf[k]+zf[k-1])/ 2.0;
}
break;
case 2: // periodicidad
Lim = L;
zf[0] = 0.0;
zc[0] = -dZ/ 2.0;
for(k=1; k<=L+1; k++)  {
zf[k] = zf[k-1] + dZ;
zc[k] = (zf[k]+zf[k-1])/ 2.0;
}
break;
}
break;
case 1: // malla no uniforme
Lim = L-1;
zf[0] = 0.0;
zc[0] = 0.0;
Zm = Z/2;
a1 =  Zm*(1.0- rel)/ (1.0-pow(rel,L/2));
for(k=1;k<=(L/2);k++)  {
dZ = a1*pow(rel,k-1);
zf[k] = zf[k-1] + dZ;
zc[k] = (zf[k]+zf[k-1])/ 2.0;
}
for(k=(L/2)+1; k<=L; k++)  {
dZ = a1*pow(rel,L-k);
zf[k] = zf[k-1] + dZ;
zc[k] = (zf[k]+zf[k-1])/ 2.0;
}
zf[L+1] = zf[L];
zc[L+1] = zf[L];
break;
 }
}


Alguém sabe o que pode ser isso?


GOSTEI 0
Rodc

Rodc

03/06/2009

´Unreachable code´ é um aviso que tem algum código que não será executado devido a um ´break´ ou ´return´ errado. Em que linha do seu código ele marca este erro?


GOSTEI 0
Sergioaav

Sergioaav

03/06/2009

Ele dá este aviso na linha q indiquei com uma flecha, xf[0] = 0.0; e depois dá novamente em yf[0] = 0.0;.


GOSTEI 0
Rodc

Rodc

03/06/2009

Todo código de um Switch deve estar dentro de um Case. Você colocou o código antes do case 0. Este código não será executa e é isto que o compilador está te alertando.


GOSTEI 0
POSTAR