C++ es wurde ein typspezifizierer erwartet.

Hallo Leute,

Show

bin gerade dabei ein Konsolenprogramm zu schreiben, welches in der Lage sein soll, Sudokus zu lösen. Mir ist klar, dass ich euch jetzt mein gesamtes Codegeheimnis anvertraue, aber ich will einfach wissen, was ich falsch mache. Bei der Kompilierung bekomme ich jede Menge unsinnige Fehler, woraufhin die Kompilierung abgebrochen wird. Es sind zwar noch nicht alle Methoden definiert, dennoch liefert mein Debugger tausende Fehler, die ich mir nicht erklären kann.

Mein Programm besteht aus 3 Dateien. Einer Main, einer Klasse namens CSquare.h (Header) und CSquare.cpp, welche die Methoden und den Konstruktor definiert. Von CSquare sollen 81 kleine Instanzen abgeleitet werden (für jedes Soduko-Feld). Zu Beginn wird durch den Konstruktor die Position des Kästchens und der Wert festgelegt (ist er bekannt muss er 1 bis 9 sein, ansonsten null. Jedes kleine Feld (bzw. Objekt) speichert in einem Array die Zahlen 1 bis 9. Die Methode compValue(CSquare name) kann dann den Wert dieses Feldes mit dem eines anderen vergleichen und überschreibt im Array die Zahl, die im anderen Feld vorkommt, mit einer Null. Die Zahl die am Ende übrig bleibt wird dann cellValue überschrieben.

Soweit, so gut, hier der Code:

#include <iostream>
#include <ostream>
using namespace std

#include "CSquare.h"


void main (void) {

	int x, y, value; //Für die Schleife: Sämtliche Kästchen Übergabe der Paramter an Konstruktor

	CSquare* pArrSquares[80]; //Zeiger Array 


	for (x=1, x=9, x++)
	{
		for (y=1, y=9, y++) 
		{
			std::cout << "Kästchen" + x + y + "Wert:" << endl;

			std::cin >> value;

			pArrSquares[x+y-1] = new CSquare(x, y, value);

		}

	}

}

Klassendeklaration "CSquare.h"

#include "CSquare.cpp"

class CSquare {
	//Variablen: 
public:
	int static xpos, ypos, cellValue;

private:

	int leftPoss[8]; //Array, der die Möglichkeiten 1-9 speichert
	int leftPossNumb; //Speichert, wie viel Möglichkeiten noch übrig sind

//Methoden:

public:

	  CSquare(); //Konstruktor
	  ~CSquare(); //Destruktor

	 void CompValue(CSquare); //Grundlegender Vergleich, wird von allen aim-Funktionen benutzt

	 void aimHoriRow(); //aim-Funktionen
	 void aimVertiRow();
	 void aimField();

	 void returnCellValue();

private:

	 void changeCellValue(); //kann cellValue ändern
}

Methodendefinition in CSquare.cpp

void CSquare::CSquare(int x, int y, int value)  { //Konstruktor
xpos = x;
cellValue = value;

int loop; //Funktionsinterne loop

for (loop = 0, loop=9, loop++) {
	leftposs[loop] = loop; //9er Array 1-9 zuweisen 
	}

}

void CSquare::~CSquare() { }
void CSquare::CompValue(CSquare name) // Als Parameter muss ein Zeiger 
{
	int loop;

	if (name->this.returnCellValue > 0)
	{
		for (loop=0, loop=9, loop++)
		{
			if (name->CSquare::returnCellValue = CSquare::leftposs[loop])
			{
				CSquare::leftposs[loop] = 0;
				break; 

			}
			

		}
	}

}



void CSquare::aimHoriRow() {




}
int CSquare::returnCellValue (void)
{
	return CSquare::cellValue;
}

Ich hoffe, ihr könnt mir helfen.

n|plus

bool (*dummy)(window*,UINT,WPARAM,LPARAM);

Du hast eine Variable namens dummy, die ein Zeiger auf eine Funktion ist, die bool zurückgibt und die Parameter vom Typ window*, ..., LPARAM entgegennimmt.

std::vector< (bool (*dummy)(window*,UINT,WPARAM,LPARAM)) > m_vector;

Hier hast du einen vector bestehend aus einer Variable namens dummy, die ... etc.etc.etc.

Du möchtest keinen Vektor aus Variablen, sondern aus Funktionszeigern. Also lass den Namen weg, dann hast du den reinen Typ:

std::vector< (bool (*)(window*,UINT,WPARAM,LPARAM)) > m_vector;

Weiter zum Hauptinhalt

Dieser Browser wird nicht mehr unterstützt.

Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.

Compilerwarnung C4430

  • Artikel
  • 09/26/2022
  • 2 Minuten Lesedauer

In diesem Artikel

Fehlender Typspezifizierer - int wird angenommen. Hinweis: C++ unterstützt default-int nicht.

Dieser Fehler kann als Ergebnis der Compilerkonformitätsarbeit generiert werden, die für Visual Studio 2005 durchgeführt wurde: Alle Deklarationen müssen den Typ explizit angeben; int wird nicht mehr angenommen.

C4430 wird immer als Fehler ausgegeben. #pragma warning Sie können diese Warnung mit oder /wd deaktivieren. Weitere Informationen finden Sie unter warning oder /w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warnstufe).

Beispiel

Im folgenden Beispiel wird C4430 generiert.

// C4430.cpp
// compile with: /c
struct CMyClass {
   CUndeclared m_myClass;  // C4430
   int m_myClass;  // OK
};

typedef struct {
   POINT();   // C4430
   // try the following line instead
   // int POINT();
   unsigned x;
   unsigned y;
} POINT;