Greg
Greg

Reputation: 31

Error: not all control paths return a value

I am writing two functions in a program to check if a string has an assigned numeric code to its structure array or if the given numeric code has an assigned string in the same structure array. Basically, if I only know one of the two, I can get the other. I wrote the following:

int PrimaryIndex::check_title_pos(std::string title) {
    bool findPos = true;
    if (findPos) {
        for (int s = 1; s <= 25; s++) {
            if (my_list[s].title == title) {
                return s;
            }
        }
    } else {
        return -1;
    }
}

std::string PrimaryIndex::check_title_at_pos(int pos) {
    bool findTitle = true;
    if (findTitle) {
        for (int p = 1; p <= 25; p++) {
            if (my_list[p].tag == pos) {
                return my_list[p].title;
            }
        }
    } else {
        return "No title retrievable from " + pos;
    }
}

However, it says not all control paths have a return value. I thought the else {} statement would handle that but it's not. Likewise, I added default "return -1;" and "return "";" to the appropriate functions handling int and string, respectively. That just caused it to error out.

Any idea on how I can keep this code, as I'd like to think it works but cant test it, while giving my compiler happiness? I realize through other searches that it sees conditions that could otherwise end in no returning values but theoretically, if I am right, it should work fine. :|

Thanks

Upvotes: 0

Views: 1131

Answers (1)

Eugene S
Eugene S

Reputation: 3122

In the below snippet, if s iterates to 26 without the inner if ever evaluating to true then a return statement is never reached.

if (findPos) {
    for (int s = 1; s <= 25; s++) {
        if (my_list[s].title == title) {
            return s;
        }
    }
}

Upvotes: 7

Related Questions