'WinMain@16' [重复]

问题描述 投票:0回答:0

我正在为我的编程语言使用 C++ 编写 Lexer。然后不知从哪里冒出来,这个

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to 'WinMain@16'
东西被扔进去了。

我在 cmd 上使用 g++ 来编译“Lexer.cpp”文件。我知道它与

main()
函数或“WinMain”(不知道那是什么)有关。我见过一些有点像我的问题,但我尝试过的任何方法都没有用。他们讨论过使用一些不同的东西来解决这个问题,但我的代码不适合这些。如果有人关闭了这个问题,请在关闭这个问题之前检查代码的工作方式和情况。

无论如何,这是我的“Lexer.cpp”:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

enum TokenType {
  IDENTIFIER,
  KEYWORD,
  OPERATOR,
  DELIMITER,
  LITERAL,
  UNKNOWN
};

struct Token {
  TokenType type;
  string value;
};

bool is_keyword(string s) {
  vector<string> keywords = {"include", "using", "namespace", "std", "vector", "string", "char", "int", "for", "if", "else", "return"};
  for (string keyword : keywords) {
    if (s == keyword) {
      return true;
    }
  }
  return false;
}

bool is_operator(string s) {
  vector<string> operators = {"+", "-", "*", "/", "=", "==", "!=", "<", ">", "<=", ">=", "++", "--", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>=", "&&", "||", "!", "~", "&", "|", "^", "<<", ">>"};
  for (string op : operators) {
    if (s == op) {
      return true;
    }
  }
  return false;
}

bool is_delimiter(string s) {
  vector<string> delimiters = {".", ",", ";", ":", "{", "}", "[", "]", "(", ")"};
  for (string delimiter : delimiters) {
    if (s == delimiter) {
      return true;
    }
  }
  return false;
}

bool is_literal(string s) {
  if (s.empty()) {
    return false;
  }
  if (s[0] == '"' || s[0] == '\'') {
    return s.back() == s[0];
  }
  for (char c : s) {
    if (!isdigit(c) && c != '.') {
      return false;
    }
  }
  return true;
}

TokenType get_token_type(string s) {
  if (is_keyword(s)) {
    return KEYWORD;
  }
  if (is_operator(s)) {
    return OPERATOR;
  }
  if (is_delimiter(s)) {
    return DELIMITER;
  }
  if (is_literal(s)) {
    return LITERAL;
  }
  if (isalpha(s[0]) || s[0] == '_') {
    for (char c : s) {
      if (!isalnum(c) && c != '_') {
        return UNKNOWN;
      }
    }
    return IDENTIFIER;
  }
  return UNKNOWN;
}

我刚接触C++,所以请不要抱怨我上面说的东西。我感谢你的任何回答。

请不要复杂,我听不懂。如果您打算向我建议使用 GNU 或其他差异,我仍然会对此表示赞赏,但它不会对我有用。

c++ g++
© www.soinside.com 2019 - 2024. All rights reserved.