C++ 类文件未在 Linux OS 上运行的 Eclipse Mars 中构建二进制文件

Posted

技术标签:

【中文标题】C++ 类文件未在 Linux OS 上运行的 Eclipse Mars 中构建二进制文件【英文标题】:C++ Class Files Not building Binaries in Eclipse Mars Running on Linux OS 【发布时间】:2016-06-20 18:21:35 【问题描述】:

C++ 新手,在执行我的代码时遇到可怕的“找不到二进制文件”错误。这只发生在我创建了一个包含类代码的源文件时。当我编写不包含类的程序时,不会发生这种情况。例如,当我为它构建项目并运行良好时,该程序会创建二进制文件:

#include <iostream>
using namespace std;

int main()

  cout << "Hello World!";

但是当我尝试为这个文件构建一个项目时,二进制文件不会被创建:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <algorithm>    // std::max

using namespace std;

class Measure 
public:
int key;
string note;

Measure() 
    key = 13;
    //Generate a random key
    while(key > 12)
    
        key = (rand() % 100) + 1;
    
    note = startNote(key);


int getKey() 
    return key;


string getNote() 
        return note;
    

int triad()
    int first = 0;
    int third = 0;
    int fifth = 0;
    while(first == third && first == fifth )
    
        first = (rand() % 100) + 1;
        third = (rand() % 100) + 1;
        fifth = (rand() % 100) + 1;
    
    if (first > third && first > fifth)
        return 0;
    else if(third  > first && third > fifth)
        return 1;
    else
        return 2;


string startNote(int key)
    switch(key + triad())
    
    case 1 :
        note = "A";
        break;
    case 2 :
        note = "A#";
        break;
    case 3 :
        note = "B";
        break;
    case 4 :
        note = "C";
        break;
    case 5 :
        note = "C#";
        break;
    case 6 :
        note = "D";
        break;
    case 7 :
        note = "D#";
        break;
    case 8 :
        note = "E";
        break;
    case 9 :
        note = "F";
        break;
    case 10 :
        note = "F#";
        break;
    case 11 :
        note = "G";
        break;
    case 12 :
        note = "G#";
        break;
    
    return note;




~Measure() 
    // TODO Auto-generated destructor stub


int main()

    cout << "Hello, world!" << endl;
    return 0;


;

我查找了与我类似的问题,但解决方案不起作用。我尝试将项目属性菜单中的二进制解析器更改为 PE Windows Parser、Elf Parser 和 GNU Elf Parser。这似乎没有什么不同。为什么 Eclipse 在为某些文件而不是其他文件构建项目时会生成二进制文件(例如,我上面的文件包含一个名为 Measure 的类?)

【问题讨论】:

【参考方案1】:

您的主要功能在您的类定义中。您需要移动 ;在您的主要功能之上。我不知道eclipse,但它可能在这里看不到main函数,只有一个名为main()的类方法,这在C++中是没有的。

顺便说一句,您的 startNote 方法似乎有一个错误。看起来 key + triad() 可以提供 switch 语句未涵盖的值。那么在这种情况下你的对象是如何构造的呢?

【讨论】:

嘿,谢谢!那行得通(很抱歉犯了这样一个新手错误,顺便说一句。)而且,很好地抓住了 switch 语句。我认为实际上有两个我没有考虑的额外案例。我给他们分配了 A 和 A#。稍后我将不得不找出一种表示八度音阶的方法。 :) 再次感谢吉姆!

以上是关于C++ 类文件未在 Linux OS 上运行的 Eclipse Mars 中构建二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 上使用 Eclipse CDT 调试远程 Linux 应用程序

使用文件路径 c++ Linux OS 访问 Armadillo 库

linux (g++) 上的分段错误,但 Mac OS 上没有。?

Android Tensorflow Lite C++ .SO 库未在运行时链接

Linux 中的 Segfault,在 Mac OS 上运行良好

使用 Qt 在 OS X/Mac 上构建 C++ 库