0

我想我的包含做错了,但我似乎无法找到我做错了什么。我在 w7 64 位系统上使用 Visual Studio 10。

我得到的编译错误:

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 的类定义(尽管他没有警告我),但我不明白为什么会这样。我将代码减少到最低限度,因此只保留了错误函数. 在此先感谢您的时间

test.h:类Test的定义,有2个属性,getter,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: Test 类的函数定义

#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

感谢您的帮助,我希望我的英语没有冒犯您。

4

2 回答 2

3

首先,您不能定义变量并将其命名为与现有类型相同的方式:

Test* TestD::newTest(Test* Test)

重命名该测试变量。

然后会导致有符号无符号不匹配警告,因为您正在将 的返回值std::vector::sizeasize_t与a 进行比较int

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

将其类型修改i为 size_t ,您将删除该警告:

for(size_t i =0; i < Testen.size(); i++)
于 2012-03-22T18:25:34.223 回答
0

通常在声明指针时,您必须使用 new 进行分配,例如

Test *temp=new Test(...);
于 2012-03-22T18:47:19.743 回答