2012-03-22 32 views
0

我想我正在做我的包括错误,但我似乎无法找到我是做错了什么。我在w7 64位系统上使用visual studio 10。C++错误:尝试创建对象时出现“未声明的标识符”。标题问题?

编译错误,我得到:

testd.cpp(9): warning C4018: '<' : signed/unsigned mismatch 
testd.cpp(21): warning C4018: '<' : signed/unsigned mismatch 
testd.cpp(36): error C2065: 'tmp' : undeclared identifier 
testd.cpp(37): error C2065: 'tmp' : undeclared identifier 
testd.cpp(37): error C2227: left of '->getTestId' must point to class/struct/union/generic type 
type is ''unknown-type'' 
testd.cpp(40): error C2065: 'tmp' : undeclared identifier 
testd.cpp(41): error C2065: 'tmp' : undeclared identifier 

所以每次我试图做一个新的对象(TMP)的时候,他说:“未声明的标识符”。 我的猜测是他无法获得Test的类定义(aldho他并没有警告我),但我不明白为什么是这样..我将代码减少到了最小,这样只有错误功能依然存在。在此先感谢您的时间

test.h:一类测试,有2 atributes,干将,setter方法,构造函数和析构函数的定义

#pragma once 
class Test 
{ 
private: 
    int myTestId; 
    string myTestNaam;  
public: 
    Test(); 
    Test(string TestNaam,int TestId); 
    ~Test(); 
    int getTestId(); 
    string getTestNaam(); 
    void setTestId(int TestId); 
}; 

* TEST.CPP:功能定义类试验

#include "stdafx.h" 
#include "headers/Test.h" 
Test::Test() {setTestId(0);} 
Test::Test(string TestNaam, int TestId) {setTestId(TestId);} 
Test::~Test() {}  
void Test::setTestId(int TestId) {myTestId=TestId;} 
int Test::getTestId() {return myTestId;} 

testd.h:一类TESTD的定义,与静态矢量,和静态函数

#pragma once 
#include "Test.h" 
class TestD 
{ 
private: 
    static vector<Test*> Testen; 
    static int getPosition(int ID); 
public: 
    static Test* newTest(Test*); 
    static Test* getTest(int ID); 
}; 

testd.cpp:对于类的功能定义TESTD

#include "StdAfx.h" 
#include "headers/Test.h" 
#include "headers/Testd.h" 
vector<Test*> TestD::Testen = vector<Test*>(); 
Test* TestD::getTest(int ID) 
{for(int i =0; i < Testen.size(); i++) 
    {Test* tmp = Testen.at(i); 
    if(tmp->getTestId() == ID) 
    return tmp; 
} 
return 0; 
} 

int TestD::getPosition(int ID) 
{for(int i = 0; i < Testen.size(); i++) 
    {Test* tmp = Testen.at(i); 
    if(tmp->getTestId() == ID) 
    return i; 
} 
return -1; 
} 

Test* TestD::newTest(Test* Test) 
{if(Test->getTestId()==-1) 
    {Test* tmp = Testen.at(Testen.size()-1); 
    int newId = tmp->getTestId()+1; 
    Test->setTestId(newId); 
    } 
    Test* tmp = getTest(Test->getTestId()); 
    if(tmp==0) 
{Testen.push_back(Test); 
    return Test; 
} 
} 

最后我包括我的Stdafx.h

#pragma once 
#include "targetver.h" 
#include <stdio.h> 
#include <tchar.h> 
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <string> 
using namespace std; 
//some includes are not used in the files I mentioned here, but other files need them 

感谢您的帮助,我希望我没有因我英语不好而得罪你。

+0

btw:我知道错误“signed/unsigned mismatch”是因为“Testen.size()”函数返回一个int_t(signed)。所以这些错误现在不是我的问题 – Rps 2012-03-22 18:25:59

+0

我希望*这种类型的错误消息是C++中最有问题的错误消息。 – ulidtko 2012-03-22 18:29:05

回答

3

首先,你不能定义一个变量,并将其命名方式与现有的类型:

Test* TestD::newTest(Test* Test) 

重命名测试变量。

然后签署,签名missmatch警告是因为你比较std::vector::size的返回值,其中size_t,与int引起的:

for(int i =0; i < Testen.size(); i++) 

修改i的类型为size_t,你会删除警告:

for(size_t i =0; i < Testen.size(); i++) 
+0

立即尝试! – Rps 2012-03-22 18:31:12

+0

谢谢你,先生,我的大部分问题都没有解决。 总是让另一个人看到自己的愚蠢 – Rps 2012-03-22 18:43:18

0
通常

声明指针,你有新的分配,当像

Test *temp=new Test(...);