Alle begin is moeilijk deel 2

Status
Niet open voor verdere reacties.

jan68

Gebruiker
Lid geworden
19 apr 2012
Berichten
90
Na maanden lang ziek te zijn geweest ,toch weer begonnen met de software
uiteindelijk staat er dit in huis.ccp
het inlezen van de coordinaten gaat nu goed ,alleen de over gang naar de volgen functie geeft problemen

Hoewel de functie geen output heeft geerft het declarenen van load een probleem NL error4430
maken we er Void load van dan heeft de linker een probleem met
void load als
bool abcopy voor beide error lnk2019 unresolved extrernal symbol

wie kan mij zeggen wat de oplossing hiervoor is
Code:
*****************************************************************************/
#include "stdafx.h"



//#include <QCoreApplication>
//#include <QDataStream>

#include "xhuis.h"
#include "math.h"
#include <iomanip>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>

#include <tchar.h>
//jw   #include <vector>


#define QString
#define str1
#define str2



bool Xhuis::s_bCancel = false;
bool Xhuis::s_bFullReport = false;
double Xhuis::vaccel = 0.01;

using namespace std;
using::cout;
using::setw;
using::endl;
//jw   using::vector
     
void load();
bool abcopy(double xb[IBX],double yb[IBX], int IP);
    
//jw   Qstring str;

int main()     
{
    int I;
    int IP;

    std::ifstream file("D:/test/Coor/E180.COO");
    std::string name;
    std::string nb:
    std::string line;

    double xb[IBX], yb[IBX];
    double Value1, Value2;
    
    getline(file, name);
    std::cout << std::setw(10) << name << std::endl;
    getline(file, nb);
    std::cout << std::setw(5) << nb << std::endl;

    for (I = 0; getline(file, line); I++)
        // Read a line of input from the file
    {
        std::istringstream iss(line);
        std::cout << setprecision(5) << showpoint << fixed;
        if (iss >> Value1 >> Value2)
        {
            IP = I + 1;
            if (I < 9)
            {
                std::cout << std::setw(6) << "XB(" "0" << IP << ") = " << Value1;
                xb[IP] = Value1;
            }
            else
            {
                std::cout << std::setw(5) << "XB(" << IP << ") = " << Value1;
                xb[IP] = Value1;
            }
            if (I < 9)
            {
                std::cout << std::setw(11) << "YB(" "0" << IP << ") = " << Value2;
                yb[IP] = Value2;
            }
            else
            {
                std::cout << std::setw(10) << "YB(" << IP << ") = " << Value2;
                yb[IP] = Value2;
            }
        }
        std::cout << std::endl;
    } 
    load();
    abcopy(xb,yb,IP);
return 0;
}


void Xhuis::load()
{
    //------ primary dimensioning limit parameters

    //------ derived dimensioning limit parameters
    //    nax=800;//number of points in stored polar
    //    npx=8;//number of polars and reference polars
    //    nfx=128;// number of points in one reference polar
    //    ncom = 73;

    // imx   number of complex mapping coefficients  cn
    m_bTrace = false;


    sccon = 5.6;
    gacon = 6.70;
    gbcon = 0.75;
    gbc0 = 0.60; 
    gbc1 = 0.40;
    gccon = 18.0;
    dlcon = 0.9;
    ctcon = 0.01485111754659538130244; //(ctcon = 0.5/(gacon**2 * gbcon))
    angtol = 40.0;

enz.....enz..

Voor xhuis.h

Code:
#pragma once

/**
*@file This class defines the Xhuis object.
*/

  #ifndef Xhuis_H
  #define Xhuis_H
  #define QString


/**
class Xhuis
//jw  The class which defines the Xhuisl object.
};
#endif

Voor code stdafx.h

Code:
//
#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
//jw    #include <string>



// TODO: reference additional headers your program requires here
//Xhuis Direct Parameters - refer to Xhuisl documentation
#define IQX  302    /**< 300 = number  + 6 */
#define IQX2 151    /**< IQX/2 */
#define IWX   50    /**< number of wake panel nodes */
#define IPX    6    /**< 6 number of qspec[s] distributions */
#define ISX    3    /**< number of sides */
#define IBX  604    /**< 600 number of buffer = 2*IQX */
#define IZX  350    /**< 350 = number  */
#define IVX  302    /**< 300 = number . */

//Xhuis INVERSE parameters  - refer to Xhuis documentation
#define ICX 257     /**< number of circle-plane points for complex mapping   ( 2^n  + 1 ) */
#define IMX 64      /**< number of complex mapping coefficients  Cn */
#define IMX4 16     /**< = IMX/4 */
 
Kan iemand mij helpen met dit probleem
Ik kom er niet uit heb van alles geprobeerd maar hoe kom ik uit het file (int main )
met mede neming van de waardes (XB en YB arrays) naar het class file (Huis::Abcopy(xb(),yb(),ip)
ik weet niet hoe ik moet beginnen
bij voorbaat hartelijk dank.
 
bekijk einde van lijn
Code:
std::string nb:
bekijk ook volgende lijn
Code:
/**
class Xhuis
doel?
 
Laatst bewerkt:
Hallo kenikavanbis
Dat zijn inderdaad slordigheden van mij.maar ik kan je verzekeren dat die zijn opgemerkt.
maar verder niet opleveren.
dit zijn slordigheden van het proberen.
ik kom er niet uit. wie kan mij helpen ???
gr jan
 
Ik ben er nog steeds niet uit maar wel een stukje verder.
In het headerfile heb ik het volgende opgenomen
Code:
class Point {
private:
	int nb,ip;
	double xb, yb;
public:
	void abcopy( double xb[IBX] , double yb[IBX] , int nb, int ip);   enz,enz
de grote van IBX is in een ander file aangegeven en met #include gekoppeld.
en in de main
Code:
		    void Point::abcopy(xb(ip), yb(ip), nb, ip);  ?? deze regel geeftalle problemen
		   							
		    cout << "The surface of a: " << a.getNB() << endl;
		    cout << "startpoint of a:  " << a.getIP() << endl;
		    cout << "The width of a:   " << a.getXB() << endl;
		    cout << "The height of a:  " << a.getYB() << endl;
                   return 0;
}

void Point::abcopy(double xb[IBX],double yb[IBX],int nb, int ip){

}

DE regel void Point::abcopy(xb(ip), yb(ip), nb, ip); geeft aller lij problemen
wat ik ook probeer: void weggehaald
xb(ip) in allerlij vormen geprobeerd geen resultaat
wie o wie kan mij helpen
 
Als ik het goed zie probeer je een functie van een klasse aan te roepen terwijl je geen instantie van die klasse hebt. Dat kan alleen bij static functies. Je zou dus iets als het onderstaande moeten doen:

[cpp]
// ...
Point p;
p.abcopy(/* variabelen*/);
[/cpp]
 
hallo Cod_NL
bedank voor je reactie
IK heb uitgevoerd wat je voor heb gesteld op zich werkt dat wel maar dan reclameer
de volgende aanroep
Code:
 void xfoil2::abcopy(double xb[600], double yb[600], int nb, int ip);
IntelliSense: member function "xfoil2::abcopy" may not be redeclared outside its class d:\test\xfoil2\xfoil2\main.cpp 87 15 xfoil2
haal ik het in het header file weg
dan maakt abcopy( /*variabelen*/) weer geen deel uit van point Plus nog 2X lnk2019 en 1x lnk1120
Misschien zit ik geheel op de verkeerde weg.
Jou opmerking (dat kan alleen bij static funties) heeft mij aan het denken gezet.
Het meeste software komt uit een zeer groot programma
ik wil er een nieuwe GLU. aan vast maken daarvoor dient ik weel een file met Coordinaten in te kunnen lezen en dan verder te verwerken
nu is dat inlezen wel gelukt maar dat verder verwerken dat lukt maar niet.
in ieder geval bedank voor de tijd die je er in hebt gestoken.
groeten jan68
 
Het is eigenlijk niet zo lastig hoor. Je moet gewoon iets als de onderstaande structuur hanteren:

[cpp]
// Point.h
class Point {
public:
void abcopy(double xb[600], double yb[600], int nb, int ip);
// ...
};

// Point.cpp
void Point::abcopy(double xb[600], double yb[600], int nb, int ip) {
// implementatie
}

// Main.cpp
int main() {
// ...
Point p;
p.abcopy(/*variabele die je wilt meegeven aan de functie*/);
}
[/cpp]

Als je het deel waar je moeite mee hebt in een apart project kunt zetten (en dan echt alleen het deel waar je op vastloopt; niet een groot project of zo) dan wil ik er best even naar kijken. Heb het momenteel alleen erg druk. Maar kan kijken of ik er in het weekend tijd voor kan maken.
 
Hallo CoD_nl
het werkt nu gedeeltelijk
Ik heb alleen in het HEADER file de regel met static aangepast er staat nu
Code:
  static void abcopy(double xb[600], double yb[600], int nb, int ip);
en nog wat kleine aanpassingen moeten doen voor de grote van XB,en YB
Die nu niet 600 is maar in een file (params) gedefinieerd word
Heb alleen nog niet kunnen vaststellen of de variabelen XB,YB,nb,ip worden doorgeven.
ik moet eerst het file (abcopy) verder schrijven.
misschien dat ik tijd kan vinden in het weekend.
zover zo goed. met dank
gr jan
 
Hallo CoD_NL
Ik heb in het weekend er even naar gekeken.
maar er zit toch nog een vervelende fout in het geheel.
de variabelen XB en YB nemen geen waarden mee,naar bool point::abcopy
Code:
                       // bla,bla,bla

			if (i < 9)
			{
				cout << setw(11) << "yb(" "0" << ip << ") = " << value2;
			a.set_yb(value2);
			}
			else
			{
				cout << setw(10) << "yb(" << ip << ") = " << value2;
				a.set_yb(value2);
			}
		}
		cout << endl;
	}
	     a.abcopy(xb, yb, aantal, ip);
	  
	return 0;
}
///code in  point.cpp

bool point::abcopy(double xb[IBX], double yb[IBX], int nb, int ip){
	int i;
	if (nb <= 1)
	{
//	WriteString("abcopy: buffer airfoil not availble");
	}
	else if (nb > IQX - 2)
	{
		return false;
	}
		if (n != nb) lblini = false;
	    n = nb;
	    for (i = 1; i <= n; i++){
		x[i] = xb[i]; 
		y[i] = yb[i];
	lgsame = true;
	}
}

// void point::WriteString(QString str, bool bFullReport)
// {
//	if (!bFullReport && !s_bFullReport) return;
//	if (m_OutStream.device() != NULL)         m_OutStream << str;
//	else if (m_OutStream.string() != NULL)    m_OutStream << str;
//  }
Het debuggen levert niets op aan verwachten waarden
verder heb ik een probleem met Qstring declaratie maar dat is iets voor later
 
Mijn excuses voor de late reactie. Ik heb een behoorlijk drukke periode momenteel. Heb je het probleem inmiddels al opgelost? Verder is het me niet helemaal duidelijk wat je bedoelt. Bedoel je dat de variabelen die je meegeeft aan de functie niet veranderd worden (na de aanroep hebben ze dezelfde waarde als voorheen)? Wellicht is het overigens gewoon makkelijker dat je het deel waar je problemen mee hebt in een los project zet (en dan alleen de relevante onderdelen). Dan kan ik of iemand anders er wel even naar kijken.
 
hallo CoD_nl
Ja de variablen werden niet meegeven met de functie dus heb ik alles veranderd
Het inlezen van de waarden en het doorgeven met de functie inmiddels opgelost
Maar een groter probleem stak zijn kop op,nl het vastlopen in de stack
het geheugen van de stack is te klein dus had ik een ERROR "stack overflow"
moet weer uitzoeken hoe ik de heap moet aanspreken voor dit probleem
tot zover groeten jan68.
 
Mooi om te horen. Verder kan je om het geheugen op de heap te alloceren het volgende doen:

[cpp]
const unsigned int SIZE = 600;

double *xb = new double[SIZE];
double *yb = new double[SIZE];
[/cpp]

Wel moet je er rekening mee houden dat je het geheugen zelf weer vrij moet geven wanneer je er klaar mee bent:

[cpp]
delete[] xb;
delete[] yb;
[/cpp]
 
hallo GoD_nl
Ja het zal zo iets moeten worden.
Voor de anderen varialblen zal pas worden gedefenieerd als ik zo nodig heb en gedeletie als ze niet meer nodig zijn
dus het programma zal ingrijpen worden veranderd.
we zullen doorgaan verloopig.
gr jan68
 
IK zit met een groot probleem ,en kan er niet uitkomen.
ik wil een file met variabelen uit lezen en deze waarden in een Array in de heap opslaan zodat ik ze later kan gebruiken
nu lukt het uitlezen apart wel en het opslaan in de array apart lukt ook wel maar de combinatie er van geeft een probleem
omdat beide een aparten "scope" gebruiken en het combineren er van geeft problemen.
HTML:
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>


using namespace std;

int main()
{
	/* The 2D array is a pointer to a pointer to an int. */
	double ** Arr2D;
	int H;
	int ip;
	int i, j;
	int W = 2;

	ifstream file("D:/TEST/COOR/E180.COO");
	string line;
	string name;
	string nb;
	double value1, value2;

	getline(file, name);
	cout << setw(10) << name << endl;
	getline(file, nb);
	cout << setw(5) << nb << endl;

	std::string si = nb;
	H = std::stoi(si);
	{
	for (ip = 0; getline(file, line); ip++);
	{
		std::istringstream iss(line);
		if (iss >> value1 >> value2);
				

		/* Allocate an array of pointers to int and make Arr2D a
		pointer to the base element of the array. */

					Arr2D = new double *[H];


		/* For each row i of Arr2D (Arr2D[i]), allocate an array of
		int's and make Arr2D[i] a pointer to the base element of
		the array. */

		for (i = 0; i < H; i++)
			Arr2D[i] = new double[W];

		/* Put values in arrays. */
		// now the 2D array
		//for (i = 0; getline(file, line); i++);
		//	std::istringstream iss(line);
		//	if (iss >> value1 >> value2);   // vooral deze regel geeft problemen


		for (i = 0; i < H; ip = i); i++;
			for (j = 0; j < W; j++)
				if (j % 2 == 0)
				{
					cout << j << "  is even";
					Arr2D[i][j] = value1;
				}
				else
				{
					cout << j << "   is oneven";
					Arr2D[i][j] = value2;
				}

		cout << "The 2D array:" << endl << endl;      // now the 2D array


		for (i = 0; i < H; i++)
		{
			for (j = 0; j < W; j++)
			{
				cout << Arr2D[i][j] << "\t";
			}
			cout << endl;
		}
		cout << endl;

		for (i = 0; i < H; i++) delete[] Arr2D[i];
	   }
     
	std::cout << std::endl;
	return true;
}
vooral de regel die een "string" uit een regel schijd wil niet in een gemeenschappelijken scope werken .
wil kan mij verder helpen?
gr jan
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan