Array
(
)

Incluindo arquivos em projeto

Sergioaav
   - 03 jun 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?


Rodc
   - 04 jun 2009

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


Sergioaav
   - 04 jun 2009

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


Rodc
   - 04 jun 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´.


Sergioaav
   - 04 jun 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.


Rodc
   - 04 jun 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!


Sergioaav
   - 04 jun 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.


Rodc
   - 04 jun 2009

No includes, tente troca o ´´ por <>
#Código

#include <subEnSai.h>
include <subrotinas.h>

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


Sergioaav
   - 04 jun 2009

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


Sergioaav
   - 04 jun 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:
#Código


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?


Rodc
   - 04 jun 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?


Sergioaav
   - 04 jun 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;.


Rodc
   - 04 jun 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.