【问题标题】:Eclipse Method could not be resolved in a simple program C++Eclipse 方法无法在简单的程序 C++ 中解决
【发布时间】:2012-02-25 20:21:46
【问题描述】:

我遇到了 Eclipse Indigo 的问题,抱怨无法解析类的方法,但仍然可以编译并正常工作 (AFAIK)。这是一个非常简单的程序。这是 Population.cpp:

#include <stdlib.h>
#include <iostream>
#include <time.h>
#include "Population.h"

Population::Population() {
    // TODO Auto-generated constructor stub

}

Population::~Population() {
    // TODO Auto-generated destructor stub
}

void Population::initializePop(int numBits, int N) {

    srand((unsigned)time(0));
    for(int i=0; i<N; i++) {
        x[i] = (char*) calloc(numBits, sizeof(char));
        for(int j=0; j<numBits; j++) {
            if( rand() < 0.5 )
                x[i][j] = 0;
            else
                x[i][j] = 1;
        }
    }

}

char** Population::getX() {
    return x;
}

void Population::printStuff() {
    std::cout << "Whatever";
}

现在,我构建了该代码,一切都很好。在 Eclipse 中的另一个项目中,我这样调用这段代码:

#include <typeinfo>
#include <string.h>
#include <iostream>
#include "cute.h"
#include "ide_listener.h"
#include "cute_runner.h"
#include "Population.cpp"

void testPopulationGeneration() {
    Population* p = new Population;
    int N = 10;
    int bits = 4;
    char** pop;

    ASSERTM("Population variable improperly initialized", dynamic_cast<Population*>(p));

    std::cout << p->printStuff();
    std::cout << "Ok...";
    p->initializePop(bits, N);

    pop = p->getX();
    ASSERTM("Pop not correct size.", sizeof(pop) == 10);
}

如您所见,我还在 C++ 中运行用于 TDD 的 CUTE 插件。当我将 p 声明为 Population 类型并且第一个断言通过时,它不会抱怨。我对 C++ 有点陌生,但我确实确保将 Population.cpp 所在的项目添加到测试项目的包含路径中。

这不是什么大不了的事,因为它对我来说没有任何明显的影响,但它仍然很烦人。我没有看到它应该这样做的情况。

感谢您的帮助!

【问题讨论】:

    标签: c++ eclipse class methods


    【解决方案1】:

    sizeof(pointer) 返回指针的大小(在 32 位系统上为 4,在 64 位系统上为 8),而不是它指向的大小!将维度保存在类中,并添加一个函数来返回它们。

    另外,在initializePop 中你不应该分配实际的X 数组吗?

    X = calloc(N, sizeof(char *));
    

    或者更确切地说,您应该使用new 进行分配,因为您使用的是 C++:

    X = new char* [N];
    

    及以后:

    X[i] = new char [numbits];
    

    【讨论】:

    • 感谢您的提示!它没有回答问题,但 sizeof 提示帮助了我。我想我已经使用高级语言太久了。像这样的基础知识有点生疏。将大小与数组本身一起存储似乎是一种黑客行为,但我想如果数组的大小将是命令行输入,那么在 C++ 中没有更好的方法。
    【解决方案2】:

    这可能是与未找到外部 #include 标头相关的索引问题。请按照以下步骤操作,看看是否有帮助:

    1. 转到您的每个自定义#include(例如"cute.h")并按 F3(即“显示声明”);看看它是否能够访问该文件 或不;如果不将这些文件复制到某个记事本上
    2. 如果文件不可访问,则在您的 目录结构;例如“cute.h”和“a.h”位于, “C://Eclipse/MyWork/Workspace/Project/include_1”和 “ide_listener.h”位于 在,“C://Eclipse/MyWork/Workspace/Project/include_2”,然后复制两者 一些记事本上的文件夹路径
    3. 在 Eclipse 内部转到 Project -> Properties -> C/C++ General -> Paths and Sybmols;你会看到几个标签为IncludesSybmols, Library Paths ...
    4. 点击Library Paths -> Add -> Workspace... -> <locate the above folder paths>,然后按确定
    5. 让索引器重建;现在再次执行步骤(1);希望 文件应该可以访问
    6. 为了以后更大文件的安全,请转到Window -> Preferences -> C/C++ -> Editor -> Scalability -> "Enable scalability mode when ..." 并将行数设置为一些较大的数字,例如 500000 并按“确定”;

    最后一步是必要的,因为当您的文件的行数增加并且如果超过上述数字时,eclipse 将出于某些“可伸缩性”原因停止显示定义,即使它已经编入索引。

    【讨论】:

    • 我尝试浏览所有包含的内容,Eclipse 可以找到所有源代码,所以这似乎不是我的问题。
    • 我在 ADT 的路径和符号下没有看到“库路径”。有谁知道现在搬到哪里了?谢谢。
    • @inder,你是说Windows &gt; Preferences &gt; Debug/Release &gt; Source Lookup Path吗?
    • 这个解决方案对我有用,谢谢。我正在使用 Eclipse 火星。 2 在 Mac 上。
    【解决方案3】:

    试试这个:

    在您的项目浏览器窗口中,右键单击您的项目 -> 索引 -> 重建

    【讨论】:

      【解决方案4】:

      我根本不是任何专家,但我在 using.empty 时遇到了类似的问题,无论出于何种原因,如果您将 char 更改为字符串细微更改但解决了我的程序中的问题,它将起作用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多